Django NoReverseMatch

时间:2011-07-29 09:39:39

标签: django url django-templates

我有以下设置:

/landing_pages
    views.py
urls.py

urls.py中,当我尝试访问/competition时,我有以下内容:

from django.conf.urls.defaults import *
from django.conf import settings
from django.views.generic.simple import direct_to_template

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^competition$', 'landing_pages.views.page', {'page_name': 'competition'}, name="competition_landing"),
)

我的views.py有类似的内容:

def page(request, page_name):
    return HttpResponse('ok')

然后在模板中我试图这样做:

{% load url from future %}
<a href="{% url 'landing_pages.views.page' page_name='competition'%}">
    Competition
</a>

我显然做不到:

  

渲染时捕获NoReverseMatch:反向'landing_pages.views.page',参数'()'和关键字参数'{'page_name':u'competition'}'找不到。

我做错了什么?

2 个答案:

答案 0 :(得分:10)

你在评论中向DrTyrsa询问为什么你不能使用args或kwargs。想一想。 {% url %}标记输出 - 顾名思义 - 是用户可以点击的实际URL。但是你没有为参数的URL模式提供空间。他们会去哪儿? URL会是什么样的?它会如何运作?

如果要允许用户为视图指定参数,则必须提供一个URL模式,其中包含用于这些参数的空间。

答案 1 :(得分:0)

{% url [project_name].landing_pages.views.page page_name='competition' %}

或更好

{% url competition_landing 'competition' %}