2013-01-23 50 views
1

我將視圖中的對象數組傳遞給模板,我希望爲每個對象(到不同的視圖)生成URL。所以,我有我的URL配置:Url模板標記和NoReverseMatch

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

在模板中,我遍歷對象列表,並嘗試以生成適合於上述網址例如URL,所以我通過2個PARAMS每一個:

{% 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. 

我做錯了什麼?

回答

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

+1

對不起,但是是什麼讓他們命名? 我確實改變了,但是我仍然得到: 'show_item'的參數'()'和關鍵字參數'{'id':1,'slug':u'first-item'}'沒有找到。 – dease

+0

命名正則表達式組:'(?P ...' –

1

在您的網址slug正則表達式需要包含一個連字符(雖然我們是在它還不如加下劃線):(?P<slug>[a-zA-Z0-9_\-]+)

0

如果我沒看錯show_item應該被引用和參數命名

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

還要檢查是通過URL使用生成的內容:

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

「FOO作爲」讓你看到生成的URL不提高錯誤。