这个urlpatterns的Python Django urls.py文件列表中发生了什么?

时间:2016-09-24 18:16:33

标签: python django python-2.7 typeerror django-urls

我有三个版本的urls.py文件。

以下是导入(版本之间共享):

from django.conf.urls.static import static
from django.conf import settings
from django.conf.urls import patterns, url

from main import views

版本1. 此处一切正常。运行python2 manage.py runserver没有问题。

urlpatterns = patterns(
    url(r'^bio$', 'views.bio_view'),
)

版本2. 嗯,我需要更多网址。让我们添加它们。这里也没问题。

urlpatterns = patterns(
    '',
    url(r'^$', views.index, name='index'),
    url(r'^bio$', 'views.bio_view'),
)

版本3. 等一下...... ''在这做什么?我实际上并不需要它。我们把它删除吧,是吗?

urlpatterns = patterns(
    url(r'^$', views.index, name='index'),
    url(r'^bio$', 'views.bio_view'),
)

运行manage.py服务器后出现问题:

(忽略了一些顶级django库调用)

  File "/home/konrad/workspace/mydir/myproject/urls.py", line 20, in <module>
    url(r'^', include('main.urls')),
  File "/usr/lib/python2.7/site-packages/django/conf/urls/__init__.py",     line 52, in include
    urlconf_module = import_module(urlconf_module)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in    import_module
    __import__(name)
  File "/home/konrad/workspace/mydir/myproject/urls.py", line 15, in <module>
    url(r'^bio$', 'views.bio_view'),
  File "/usr/lib/python2.7/site-packages/django/conf/urls/__init__.py", line 91, in patterns
    t.add_prefix(prefix)
  File "/usr/lib/python2.7/site-packages/django/core/urlresolvers.py", line 232, in add_prefix
    self._callback_str = prefix + '.' + self._callback_str
TypeError: unsupported operand type(s) for +: 'RegexURLPattern' and 'unicode'

所以......实际上问题是关于版本2。 - 为什么要修复版本3。错误?什么是错误?

这里到底发生了什么?

1 个答案:

答案 0 :(得分:2)

我不确定为什么你会感到惊讶;你删除了一个参数,出了问题。 (你的第一个版本可能已经&#34;工作了#34;当你运行服务器时,但我怀疑你实际上可以访问该URL。)

您正在使用旧版本的Django。在此版本中,必须使用urlpatterns函数的结果定义patterns。该函数的第一个参数是应用于所有视图字符串的前缀。你的前缀是空的,但这并不意味着你可以删除它;您的第一个网址现在被视为前缀参数。

在最近的版本中,人们认识到这个前缀令人困惑并且很少使用。结果,patterns函数被删除,没有前缀; urlpatterns的值现在必须是一个简单的列表。此外,网址中的视图必须是callables,而不是字符串。