Url模板标记和NoReverseMatch

时间:2013-01-23 18:45:54

标签: django django-templates

我将对象数组从视图传递到模板,我想为每个对象生成URL(到不同的视图)。所以,我在我的URLconf中:

    url(r'^item/(?P<id>[0-9]+)/(?P<slug>[a-zA-Z0-9]+)$',
    'show_item',
    name='show_item'),

在模板中,我迭代对象列表并尝试生成适合上述URL示例的URL,因此我将2个参数传递给每个:

    {% for item in items %}
        Item: {{ item.title }}, description: {{ item.description }}
        URL: {% url show_item item.id item.slug %}
    {%  endfor %}

不走运,我得到了django错误:

Reverse for 'show_item' with arguments '(1, u'first-item')' and keyword arguments '{}' not found.

我做错了什么?

3 个答案:

答案 0 :(得分:1)

在您的网址中,slug正则表达式需要包含连字符(并且在我们使用连字符时也可以添加下划线):(?P<slug>[a-zA-Z0-9_\-]+)

答案 1 :(得分:0)

你的论点被命名为:

 {% for item in items %}
     Item: {{ item.title }}, description: {{ item.description }}
     URL: {% url show_item id=item.id slug=item.slug %}
 {%  endfor %}

Documentation for named groups in urls

答案 2 :(得分:0)

如果我没错,应引用show_item并将参数命名为

{% url 'show_item' id=item.id slug=item.slug %}

还使用以下命令检查网址生成的内容:

{% url 'show_item' id=item.id slug=item.slug as foo %}
{{ foo }}

“as foo”允许您在不引发错误的情况下查看生成的网址。