首页 > 解决方案 > AttributeError at /admin/ 'tuple' object has no attribute 'regex' while upgrading django version from 1.5 to 1.8

问题描述

AttributeError at /admin/ 'tuple' object has no attribute 'regex' while upgrading django version from 1.5 to 1.8

urls.py

from django.conf.urls import include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns =[
    url(r'^admin/' , include(admin.site.urls)),

    ]

Traceback

Request Method: GET
Request URL: http://localhost:8000/admin/

Django Version: 1.8.17
Python Version: 2.7.12

File "env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "env/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in wrapper
  254.                 return self.admin_view(view, cacheable)(*args, **kwargs)
File "env/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "env/local/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)
File "env/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
  223.                 if request.path == reverse('admin:logout', current_app=self.name):
File "env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in reverse
  578.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
  432.             self._populate()
File "env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in _populate
  307.                     for name in pattern.reverse_dict:
File "env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in reverse_dict
  337.             self._populate()
File "env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in _populate
  307.                     for name in pattern.reverse_dict:
File "env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in reverse_dict
  337.             self._populate()
File "env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in _populate
  297.             p_pattern = pattern.regex.pattern

标签: pythondjango

解决方案


In Django 1.8-1.11, urlpatterns should be a list of url()s. Somewhere in your code you have a tuple, for example:

urlpatterns =[
    (r'^$' , views.my_view),
]

Change it to a url()

urlpatterns =[
    url(r'^$' , views.my_view, name='my_view'),
]

Note that you can still use patterns('', ...) in Django 1.8 and 1.9. If you're upgrading, I would leave the url patterns alone at first and get the project running on Django 1.8. Then fix your urls.py so that you can upgrade to a later, supported version of Django.


推荐阅读