DJango URL反向错误:reversed()的参数必须是一个序列

时间:2015-06-11 15:05:06

标签: python django django-urls

这是我的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 %}有什么问题?

2 个答案:

答案 0 :(得分:6)

您没有名为&#34; index&#34;的网址,您有一个名为&#34;索引&#34;。

在您的公共/网址中,您使用{}代替[]来包装模式。

将来,请分别发布每个问题。

答案 1 :(得分:2)

查询1解决方案:

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

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

Index将默认使用应用程序名称空间,即common,因此可以通过common命名空间访问反向网址。

您甚至可以执行相反的操作,即将网址中的反向名称更改为index而不对模板进行任何更改。它会起作用。

查询2解决方案:

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

<强>公共/ 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'),
]