【问题标题】:DJango URL Reverse Error: argument to reversed() must be a sequenceDJango URL 反向错误:reversed() 的参数必须是一个序列
【发布时间】:2015-08-27 08:55:10
【问题描述】:

这是我的 urls.py

from django.conf.urls import include, url
from django.contrib import admin
from common.views import HomeView, LoadingSchoolView, ProcessSchoolView

urlpatterns = [
    url(r'^$', HomeView.as_view(), name='Index'),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^member/', include('member.urls', namespace='member')),
    url(r'^common/', include('common.urls', namespace='common')),

在我的 common/urls.py 中

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

urlpatterns = {
    url(r'^querySchool/(?P<q>[a-z]*)$', QuerySchoolView.as_view(), name='querySchool'),
}

现在,当我这样做时

{% url 'common:querySchool' %}, 

它给了我一个TypeError

TypeError at /member/register/learner
argument to reversed() must be a sequence
Request Method: GET
Request URL:    http://127.0.0.1:8000/member/register/learner
Django Version: 1.8.2
Exception Type: TypeError
Exception Value:    
argument to reversed() must be a sequence
Exception Location:       /Users/enzii/python_env/django18/lib/python3.4/site-packages/django/core/urlresolvers.py in _populate, line 285
Python Executable:  /Users/enzii/python_env/django18/bin/python3
Python Version: 3.4.3

这是我的观点

class QuerySchoolView(View):

    def get(self, request, q=""):

        universities = University.objects.filter(Q(name__contains=q) |
                                  Q(pinyin__contains=q) |
                                  Q(province__contains=q) |
                                  Q(country__contains=q))[:4]

        returnObj = [{'unvis-name': u.name, 'country': u.country, 'province': u.province} for u in  universities]

        return HttpResponse(returnObj)

我的{% url %} 有什么问题?

【问题讨论】:

    标签: python django django-urls


    【解决方案1】:

    你没有一个叫做“index”的 URL,你有一个叫做“Index”的 URL。

    在您的 common/urls 中,您使用 {} 而不是 [] 来包装模式。

    以后,请分别发布每个问题。

    【讨论】:

    • 但是,{% url 'common:querySchool' %} 怎么样,
    【解决方案2】:

    Query-1 解决方案:

    您已将Index 定义为网址中HomePage 视图的反向名称,但您使用index 作为模板中网址的反向名称。 将index 更改为Index,您的代码就可以工作了。

    <a class="btn btn-default-ar" href="{% url 'common:Index' %}">
    

    Index 将默认为应用程序命名空间,即 common,因此通过 common 命名空间访问反向 url。

    您甚至可以做相反的事情,将您的网址中的反向名称更改为index,而无需对模板进行任何更改。它会起作用的。

    Query-2 解决方案:

    urls.py 文件中定义的Urlpatterns 应该是一个list 模式。正如评论中提到的Gocht,尝试将common app urls 中定义的urlpatterns 更改为列表[]。

    common/urls.py

    from django.conf.urls import url
    from .views import QuerySchoolView
    
    urlpatterns = [
        url(r'^querySchool/(?P<q>[a-z]*)$', QuerySchoolView.as_view(), name='querySchool'),
    ]
    

    【讨论】:

    • {% url 'common:querySchool' %} 怎么样,它抱怨类型错误。为什么?
    • @EnXie 那是因为你在 common/urls.py 中使用 {} 而不是 []
    • 你错过了 URL 中的命名空间,它应该是 {% url 'common:Index' %}
    • 你是对的。它应该默认为应用程序命名空间,即common。更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2016-07-23
    • 2023-03-16
    • 2022-12-17
    • 2020-12-31
    • 2018-09-26
    • 2017-12-26
    相关资源
    最近更新 更多