AttributeError: 'str' object has no attribute 'regex' django 1.9

喜夏-厌秋 提交于 2019-12-10 02:20:56

问题


I am working with django 1.9 and I am currently coding - in Windows Command Prompt - python manage.py makemigrations and the error:

AttributeError: 'str' object has no attribute 'regex'

I have tried coding:

url(r'^$', 'firstsite.module.views.start', name="home"),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}, name='login'),
url(r'^signup/$', 'exam.views.signup', name='signup'),
url(r'^signup/submit/$', 'exam.views.signup_submit', name='signup_submit')

in urls.py and the error is keeps coming up.

This is my first time coding in django, so my expertise is very limited. Thank you in advance.

This is the whole urls.py:

from django.conf.urls import patterns, include, url
import django
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = patterns('',
  # Examples:
  # url(r'^$', 'firstsite.views.home', name='home'),
  # url(r'^firstsite/', include('firstsite.foo.urls')),

  # Uncomment the admin/doc line below to enable admin documentation:
  # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

  # Uncomment the next line to enable the admin:
  #url(r'^admin/', include(admin.site.urls)),

  django.conf.urls.handler400,

  url(r'^$', 'firstsite.module.views.start', name="home"),
  url(r'^admin/', include(admin.site.urls)),
  url(r'^$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}, name='login'),
  url(r'^signup/$', 'exam.views.signup', name='signup'),
  url(r'^signup/submit/$', 'exam.views.signup_submit', name='signup_submit'),
  )

回答1:


Firstly, remove the django.conf.urls.handler400 from the middle of the urlpatterns. It doesn't belong there, and is the cause of the error.

Once the error has been fixed, you can make a couple of changes to update your code for Django 1.8+

  1. Change urlpatterns to a list, instead of using patterns()

  2. Import the views (or view modules), instead of using strings in your urls()

  3. You are using the same regex for the start and login views. This means you won't be able to reach the login views. One fix would be to change the regex for the login view to something like ^login/$

Putting that together, you get something like:

from firstsite.module.views import start
from exam import views as exam_views
from django.contrib.auth import views as auth_views

urlpatterns = [
  url(r'^$', start, name="home"),
  url(r'^admin/', include(admin.site.urls)),
  url(r'^login/$', auth_views.login, {'template_name': 'login.html'}, name='login'),
  url(r'^signup/$', exam_views.signup, name='signup'),
  url(r'^signup/submit/$', exam_views.signup_submit, name='signup_submit'),
]



回答2:


Also make sure to remove the beginning empty url pattern--can be overlooked when migrating your urls.

urlpatterns = ['', # <== this blank element ('') produces the error.
    ...
]

tl;dr

For the curious, I found this out by adding a warning to the check_pattern_startswith_slash method in the django.core.checks.urls module:

def check_pattern_startswith_slash(pattern):
    """
    Check that the pattern does not begin with a forward slash.
    """
    if not hasattr(pattern, 'regex'):
        warning = Warning(
            "Invalid pattern '%s'" % pattern,
            id="urls.W002",
        )
        return [warning]

And, sure enough, I got a bunch of warnings like this:

?: (urls.W002) Invalid pattern ''



回答3:


Remove the beginning empty Url patterns and also remove

django.conf.urls.handler400,    

from your urls.py this will solve your problem.



来源:https://stackoverflow.com/questions/34853531/attributeerror-str-object-has-no-attribute-regex-django-1-9

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!