错误:“只能将元组(不是“列表”)连接到元组”在urls中,Django

3 投票
2 回答
4194 浏览
提问于 2025-04-17 03:11

我在我的网址里遇到了一个错误:

在 / 的地方出现了类型错误:只能把元组(tuple)和元组连接在一起,不能把列表(list)和元组连接。

我搞不懂我哪里出错了。里面的列表在哪里呢?

from django.conf import settings

from django.conf.urls.defaults import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = ('googleapi.apiapp.views',
    (r'^$', 'first_view'),
)

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

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

    # Static files url.
    (r'^site_media/media/(?P<path>.*)$', 'django.views.static.serve',
                                   {'document_root': settings.MEDIA_ROOT}),
    (r'^site_media/static/(?P<path>.*)$', 'django.views.static.serve',
                                {'document_root': settings.STATIC_ROOT}),
)

Django 配置

错误追踪信息:

File "/home/i159/Env/googleapi/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response
  101.                             request.path_info)
File "/home/i159/Env/googleapi/lib/python2.6/site-packages/django/core/urlresolvers.py" in resolve
  250.             for pattern in self.url_patterns:
File "/home/i159/Env/googleapi/lib/python2.6/site-packages/django/core/urlresolvers.py" in _get_url_patterns
  279.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/i159/Env/googleapi/lib/python2.6/site-packages/django/core/urlresolvers.py" in _get_urlconf_module
  274.             self._urlconf_module = import_module(self.urlconf_name)
File "/home/i159/Env/googleapi/lib/python2.6/site-packages/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/home/i159/workspace/apiroot/googleapi/../googleapi/urls.py" in <module>
  24.                                     {'document_root': settings.STATIC_ROOT}),

Exception Type: TypeError at /
Exception Value: can only concatenate tuple (not "list") to tuple

2 个回答

2

在 / 出现了 TypeError,提示只能将元组(tuple)与元组连接,而不能与列表(list)连接。

这句话的意思就是字面上的意思。它在抱怨 urlpatterns += patterns(...) 这行代码。这里的 += 是想把两个东西连接在一起。urlpatterns 是一个元组,而 patterns(...) 返回的是一个列表。你不能把这两种不同的东西混在一起连接。

要解决这个问题,你首先得决定你想要的结果是元组还是列表(连接两个元组会得到一个元组,连接两个列表会得到一个列表),然后相应地调整其中一个。

在你的情况下,显然你想要的是一个列表。你给 urlpatterns 赋值的内容看起来像是 patterns() 的一组参数。简单来说,正如 @patrys 指出的那样,你本来是想在这里调用这个函数,但忘记了。这会给你一个列表,然后你就可以把第二次调用返回的列表连接到这个列表上。

注意,你也可以一步到位:urlpatterns = patterns(...) + patterns(...)

那里面的列表在哪里呢?

正如上面解释的,patterns() 的调用结果就是列表(文档里也应该有说明 - 我对 django 不太了解,只是擅长调试)。

4

这个错误基本上就是在告诉你问题出在哪里。你在第一次定义 urlpatterns 时,忘记调用 patterns() 这个函数了。

撰写回答