【问题标题】:Django 1.8 template's URL tag TypeErrorDjango 1.8 模板的 URL 标签 TypeError
【发布时间】:2015-11-07 03:15:42
【问题描述】:

我正在尝试学习如何使用 Django 模板的 URL 标签来使我的代码更通用,但我遇到了一些异常。

Exception Type:     TypeError
Exception Value:    argument to reversed() must be a sequence

这是我的全局 urls.py

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^polls/', include('polls.urls'))
]

这是我的应用程序 urls.py

from django.conf.urls import url
from . import views

urlpatterns = {
    url(r'^$', views.index, name='index'),
    url(r'^(?P<id>[0-9]+)/$', views.detail, name='detail'),
    url(r'^(?P<id>[0-9]+)/results/$', views.results, name='results'),
    url(r'^(?P<id>[0-9]+)/vote/$', views.vote, name='vote')
}

这是我尝试使用该功能的一个模板。

{% if latest_question_list %}
  <ul>
    {% for question in latest_question_list %}
      <li><a href="{% url 'polls:detail' question.id %}">{{ question.content }}</a></li>
    {% endfor %}
  </ul>
{% else %}
  <p>No polls are available.</p>
{% endif %}

追溯:

File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/polydo_s/Projects/Modeling/app/polls/views.py" in index
  11.     return render(request, 'polls/index.html', context)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/shortcuts.py" in render
  67.             template_name, context, request=request, using=using)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/loader.py" in render_to_string
  99.         return template.render(context, request)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/backends/django.py" in render
  74.         return self.template.render(context)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/base.py" in render
  209.                     return self._render(context)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/base.py" in _render
  201.         return self.nodelist.render(context)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/base.py" in render
  903.                 bit = self.render_node(node, context)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/debug.py" in render_node
  79.             return node.render(context)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/defaulttags.py" in render
  329.                 return nodelist.render(context)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/base.py" in render
  903.                 bit = self.render_node(node, context)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/debug.py" in render_node
  79.             return node.render(context)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/defaulttags.py" in render
  217.                             nodelist.append(node.render(context))
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/template/defaulttags.py" in render
  493.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/core/urlresolvers.py" in reverse
  579.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
  433.             self._populate()
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/core/urlresolvers.py" in _populate
  308.                     for name in pattern.reverse_dict:
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/core/urlresolvers.py" in reverse_dict
  338.             self._populate()
File "/home/polydo_s/Projects/Modeling/venv/lib/python3.4/site-packages/django/core/urlresolvers.py" in _populate
  285.         for pattern in reversed(self.url_patterns):

我已经找了好几个小时了,我似乎遵循了所有的指导方针来完成这项工作,但当然肯定有问题。

【问题讨论】:

  • 能否请您显示堆栈跟踪的其余部分,以便我们知道views.detail 中不会引发此异常?
  • 不相关,但您在您的主人urls.py 中忘记了namespace="polls"。再看看tutorial

标签: python django django-templates


【解决方案1】:

您已将urlpatterns 定义为set - {}。你需要一个list - []

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(?P<id>[0-9]+)/$', views.detail, name='detail'),
    url(r'^(?P<id>[0-9]+)/results/$', views.results, name='results'),
    url(r'^(?P<id>[0-9]+)/vote/$', views.vote, name='vote')
]

【讨论】:

  • 真的。我对 Django 真的很陌生,但我没有看到它的到来。非常感谢你,因为我可以从字面上搜索 AGES。
  • @SwannPolydor 不客气。回头看看我早期的问题(也与 Django 相关)笑一笑,你会感觉好多了。
  • 这不是dict,而是set{0: 1, 2: 3} 会给你一个dict,但是使用像{0, 2} 这样的单个值会给你一个集合。
  • @Matthias 啊,是的,我忘了。谢谢。我已经更新了答案。
猜你喜欢
  • 2010-12-19
  • 2011-10-22
  • 2012-09-10
  • 1970-01-01
  • 2012-11-08
  • 2010-09-20
  • 2012-11-07
  • 1970-01-01
  • 2021-08-31
相关资源
最近更新 更多