DJango URL Reverse Error: argument to reversed() must be a sequence
DJango URL Reverse Error: argument to reversed() must be a sequence
这是我的 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 %}
怎么了?
您没有一个名为 "index" 的 URL,您有一个名为 "Index"。
并且在您的 common/urls 中,您使用 {}
而不是 []
来包装模式。
以后请post每个问题分开。
查询-1 解决方案:
您在 url 中将 Index
定义为 HomePage
视图的反向名称,但您正在使用 index
作为 url 在你的模板中。
将 index
更改为 Index
,您的代码将起作用。
<a class="btn btn-default-ar" href="{% url 'common:Index' %}">
Index
将默认为应用程序命名空间,即 common
,因此通过 common
命名空间访问相反的 url。
您甚至可以执行相反的操作,即将 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'),
]
这是我的 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 %}
怎么了?
您没有一个名为 "index" 的 URL,您有一个名为 "Index"。
并且在您的 common/urls 中,您使用 {}
而不是 []
来包装模式。
以后请post每个问题分开。
查询-1 解决方案:
您在 url 中将 Index
定义为 HomePage
视图的反向名称,但您正在使用 index
作为 url 在你的模板中。
将 index
更改为 Index
,您的代码将起作用。
<a class="btn btn-default-ar" href="{% url 'common:Index' %}">
Index
将默认为应用程序命名空间,即 common
,因此通过 common
命名空间访问相反的 url。
您甚至可以执行相反的操作,即将 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'),
]