+ 不支持的操作数类型:'RegexURLPattern' 和 'str'
unsupported operand type(s) for +: 'RegexURLPattern' and 'str'
您好,我无法解决这个问题,
我关注了http://blackglasses.me/2013/09/17/custom-django-user-model/
教程.
我不记得了,但我想我在某处读到过,如果你使用功能视图,你必须导入一些东西,但不确定这里是否是这种情况,或者这是否属实。
这是我在帐户应用程序中用于 urls.py 的代码
from django.conf.urls import patterns, url
from accounts import views
urlpatterns = patterns(
url(r'^register$', 'accounts.views.register', name='register'),
url(r'^login$', 'accounts.views.login', name='login'),
url(r'^logout$', 'accounts.views.logout', name='logout'),
)
主要urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = ['',
url(r'^accounts/', include('accounts.urls', namespace='accounts')),
url(r'^admin/', include(admin.site.urls)),
]
下面是错误信息和回溯
Environment:
Django Version: 1.8.5
Python Version: 3.4.0
Request Method: GET
Request URL: http://127.0.0.1:8777/
Django Version: 1.8.5
Python Version: 3.4.0
Request Method: GET
Request URL: http://127.0.0.1:8777/
Django Version: 1.8.5
Exception Type: TypeError
Exception Value:
unsupported operand type(s) for +: 'RegexURLPattern' and 'str'
Exception Location: /home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py in add_prefix, line 223
Python Executable: /home/kevin/djangoP/envRU/bin/python
Python Version: 3.4.0
Traceback:
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
119. resolver_match = resolver.resolve(request.path_info)
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in resolve
365. for pattern in self.url_patterns:
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in url_patterns
401. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in urlconf_module
395. self._urlconf_module = import_module(self.urlconf_name)
File "/home/kevin/djangoP/envRU/lib/python3.4/importlib/__init__.py" in import_module
109. return _bootstrap._gcd_import(name[level:], package, level)
File "/home/kevin/djangoP/ru/rulinked/rulinked/urls.py" in <module>
20. url(r'^accounts/', include('accounts.urls', namespace='accounts')),
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/conf/urls/__init__.py" in include
33. urlconf_module = import_module(urlconf_module)
File "/home/kevin/djangoP/envRU/lib/python3.4/importlib/__init__.py" in import_module
109. return _bootstrap._gcd_import(name[level:], package, level)
File "/home/kevin/djangoP/ru/rulinked/accounts/urls.py" in <module>
7. url(r'^logout$', 'accounts.views.logout', name='logout'),
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/conf/urls/__init__.py" in patterns
61. t.add_prefix(prefix)
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in add_prefix
223. self._callback_str = prefix + '.' + self._callback_str
Exception Type: TypeError at /
Exception Value: unsupported operand type(s) for +: 'RegexURLPattern' and 'str'
如果你读到那么多,那么谢谢你,我知道很多,但我真的迷路了,不知道还能从哪里得到帮助。
将您的应用 urls.py 修改为:
from django.conf.urls import patterns, url
from accounts import views
urlpatterns = patterns('', // add the empty string here
url(r'^register$', 'accounts.views.register', name='register'),
url(r'^login$', 'accounts.views.login', name='login'),
url(r'^logout$', 'accounts.views.logout', name='logout'),
)
此外,从您的主 urls.py:
中删除空字符串
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = [
url(r'^accounts/', include('accounts.urls', namespace='accounts')),
url(r'^admin/', include(admin.site.urls)),
]
因为我认为使用方括号版本时不需要它。
您混淆了两种可用的语法。
patterns()
函数将前缀作为第一个参数,它是一个(可能为空的)字符串,returns 一个列表,每个模式都添加了前缀。其他参数是 url()
个实例。普通列表应仅包含 url()
个实例,并且您不能添加公共前缀。
patterns()
已弃用,所以最好到处使用列表:
accounts/urls.py
urlpatterns = [
url(r'^register$', 'accounts.views.register', name='register'),
url(r'^login$', 'accounts.views.login', name='login'),
url(r'^logout$', 'accounts.views.logout', name='logout'),
]
urls.py
urlpatterns = [
url(r'^accounts/', include('accounts.urls', namespace='accounts')),
url(r'^admin/', include(admin.site.urls)),
]
关于导入视图:如果你传递函数本身,你需要导入它们。如果您不先导入它,该函数将不可用并导致 NameError
。现在你传递的是一个导入路径,而不是函数,所以你不必导入任何东西。这也已弃用(对于视图,不包括其他 url 配置),因此为了与未来的 Django 版本兼容,您可以将其更改为:
from django.conf.urls import url
from accounts import views
urlpatterns = [
url(r'^register$', views.register, name='register'),
url(r'^login$', views.login, name='login'),
url(r'^logout$', views.logout, name='logout'),
]
请注意,url()
的第二个参数不再是字符串,而是导入的 views
模块中的视图函数本身。
您好,我无法解决这个问题,
我关注了http://blackglasses.me/2013/09/17/custom-django-user-model/ 教程.
我不记得了,但我想我在某处读到过,如果你使用功能视图,你必须导入一些东西,但不确定这里是否是这种情况,或者这是否属实。
这是我在帐户应用程序中用于 urls.py 的代码
from django.conf.urls import patterns, url
from accounts import views
urlpatterns = patterns(
url(r'^register$', 'accounts.views.register', name='register'),
url(r'^login$', 'accounts.views.login', name='login'),
url(r'^logout$', 'accounts.views.logout', name='logout'),
)
主要urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = ['',
url(r'^accounts/', include('accounts.urls', namespace='accounts')),
url(r'^admin/', include(admin.site.urls)),
]
下面是错误信息和回溯
Environment:
Django Version: 1.8.5
Python Version: 3.4.0
Request Method: GET
Request URL: http://127.0.0.1:8777/
Django Version: 1.8.5
Python Version: 3.4.0
Request Method: GET
Request URL: http://127.0.0.1:8777/
Django Version: 1.8.5
Exception Type: TypeError
Exception Value:
unsupported operand type(s) for +: 'RegexURLPattern' and 'str'
Exception Location: /home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py in add_prefix, line 223
Python Executable: /home/kevin/djangoP/envRU/bin/python
Python Version: 3.4.0
Traceback:
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
119. resolver_match = resolver.resolve(request.path_info)
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in resolve
365. for pattern in self.url_patterns:
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in url_patterns
401. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in urlconf_module
395. self._urlconf_module = import_module(self.urlconf_name)
File "/home/kevin/djangoP/envRU/lib/python3.4/importlib/__init__.py" in import_module
109. return _bootstrap._gcd_import(name[level:], package, level)
File "/home/kevin/djangoP/ru/rulinked/rulinked/urls.py" in <module>
20. url(r'^accounts/', include('accounts.urls', namespace='accounts')),
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/conf/urls/__init__.py" in include
33. urlconf_module = import_module(urlconf_module)
File "/home/kevin/djangoP/envRU/lib/python3.4/importlib/__init__.py" in import_module
109. return _bootstrap._gcd_import(name[level:], package, level)
File "/home/kevin/djangoP/ru/rulinked/accounts/urls.py" in <module>
7. url(r'^logout$', 'accounts.views.logout', name='logout'),
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/conf/urls/__init__.py" in patterns
61. t.add_prefix(prefix)
File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in add_prefix
223. self._callback_str = prefix + '.' + self._callback_str
Exception Type: TypeError at /
Exception Value: unsupported operand type(s) for +: 'RegexURLPattern' and 'str'
如果你读到那么多,那么谢谢你,我知道很多,但我真的迷路了,不知道还能从哪里得到帮助。
将您的应用 urls.py 修改为:
from django.conf.urls import patterns, url
from accounts import views
urlpatterns = patterns('', // add the empty string here
url(r'^register$', 'accounts.views.register', name='register'),
url(r'^login$', 'accounts.views.login', name='login'),
url(r'^logout$', 'accounts.views.logout', name='logout'),
)
此外,从您的主 urls.py:
中删除空字符串from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = [
url(r'^accounts/', include('accounts.urls', namespace='accounts')),
url(r'^admin/', include(admin.site.urls)),
]
因为我认为使用方括号版本时不需要它。
您混淆了两种可用的语法。
patterns()
函数将前缀作为第一个参数,它是一个(可能为空的)字符串,returns 一个列表,每个模式都添加了前缀。其他参数是 url()
个实例。普通列表应仅包含 url()
个实例,并且您不能添加公共前缀。
patterns()
已弃用,所以最好到处使用列表:
accounts/urls.py
urlpatterns = [
url(r'^register$', 'accounts.views.register', name='register'),
url(r'^login$', 'accounts.views.login', name='login'),
url(r'^logout$', 'accounts.views.logout', name='logout'),
]
urls.py
urlpatterns = [
url(r'^accounts/', include('accounts.urls', namespace='accounts')),
url(r'^admin/', include(admin.site.urls)),
]
关于导入视图:如果你传递函数本身,你需要导入它们。如果您不先导入它,该函数将不可用并导致 NameError
。现在你传递的是一个导入路径,而不是函数,所以你不必导入任何东西。这也已弃用(对于视图,不包括其他 url 配置),因此为了与未来的 Django 版本兼容,您可以将其更改为:
from django.conf.urls import url
from accounts import views
urlpatterns = [
url(r'^register$', views.register, name='register'),
url(r'^login$', views.login, name='login'),
url(r'^logout$', views.logout, name='logout'),
]
请注意,url()
的第二个参数不再是字符串,而是导入的 views
模块中的视图函数本身。