Django 1.5中的反向匹配URL

时间:2013-09-18 09:53:48

标签: django django-urls

我在Django中有一个像这样定义的URL:

# http://localhost:8000/quiz/grammar/beginner/1/question

url(r'^(?P<page_name>[-\w]+)/(?P<level>\w+)/(?P<quiz_id>\d+)/question/$', views.question, name='question')

如果我传递静态值,我就不会收到任何错误:

<a href="{% url 'quiz:question' "fds" "fds" 1 %}">{{ i.name }}</a>

由于我已经在此页面上:http://localhost:8000/quiz/grammar/beginner/我想过像这样传递网址:

{% for i in quizes %}

    <a href="{% url 'quiz:question' i.id %}">{{ i.name }}</a>

{% endfor %}

我已定义namespace。但是我得到了这个错误:

Reverse for 'question' with arguments '(1L,)' and keyword arguments '{}' not found.

我认为这样做是这样的:

def question(request, quiz_id):

出了什么问题?

编辑:试过这个,仍然没有运气:

def question(request, page_name, level, quiz_id):

1 个答案:

答案 0 :(得分:0)

url标记返回绝对网址。它不知道您所在的页面,因此在使用标记时您不能忽略levelquiz参数。

如果模板上下文中有page_namelevel,则可以在url标记中使用这些变量。

<a href="{% url 'quiz:question' page_name level i.id %}">{{ i.name }}</a>

如果您在网址中捕获page_namelevel个参数,那么您更改视图功能以接受它们是正确的。

def question(request, page_name, level, quiz_id):