+的操作数类型不受支持:“RegexURLPattern”和“str”

2024-07-03 06:49:14 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我很难解决这个问题

我跟着http://blackglasses.me/2013/09/17/custom-django-user-model/ 辅导的。在

我不记得了,但我想我在某个地方读到,如果你使用函数视图,你必须导入一些东西,但不确定这是真的还是真的。在

这是我的代码网址.py在accounts应用程序中

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'),

基本上网址.py在

^{pr2}$

下面是错误消息和回溯

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'

如果你读了那么多,那么谢谢你,我知道很多,但我真的迷路了,不知道还有什么地方可以得到帮助。在


Tags: djangoinpyimporturlhomelibpackages
2条回答

你混淆了两种可用的语法。在

patterns()函数将前缀作为第一个参数,该参数是一个(可能是空的)字符串,并返回一个在每个模式中添加前缀的列表。其他参数是url()实例。普通列表应该只包含url()实例,并且不能添加公共前缀。在

{cd1>最好使用

帐目/网址.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'),
]

在网址.py在

^{pr2}$

至于导入视图:如果传递函数本身,则需要导入视图。如果不先导入,则函数不可用,并导致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模块中的view函数本身。在

编辑你的应用网址.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'),
)

同时,从主目录中删除空字符串网址.py公司名称:

^{pr2}$

因为我不认为在使用方括号版本时需要它。在

相关问题 更多 >