2013-12-16 61 views
5

我試圖讓下面的模板片斷工作:Django模板:如何擴大變量到字符串參數的內置標籤`url`

<ul> 
    {% for name,label in entries.items %} 
    <li><a href="{% url name %}">{{ label }}</a></li> 
    {% endfor %} 
</ul> 

正如你可以看到name是一個變量我需要將它擴展爲字符串,然後將它傳遞給url內置標籤。

不幸的是,上述模板片斷導致以下異常:

Exception Type: TemplateSyntaxError 
Exception Value:  
Caught NoReverseMatch while rendering: Reverse for 'name' with arguments '()' and keyword arguments '{}' not found. 

就如何實現這一目標的任何想法或替代方法?

回答

2

您的代碼應該適用於Django的> = 1.4(IIRC) - 假設name解析爲有效的url名稱,並且此url不需要args或kwargs。對於Django 1.3x,您必須將{% load url from future %}添加到您的模板才能使用。對於django < 1.3你運氣不好(呃,你必須寫一個自定義標籤) - 但你應該考慮移植你的代碼。

+0

這是我正在尋找的答案。有用!謝謝! :) (我正在使用django 1.3.7) – fstab

3

您可以將變量傳遞給{% url %} templatetag。如果name是有效的urlpattern名稱此代碼段應該工作。

如果需要name轉換爲有效URLPATTERN名,您可以通過使用自定義過濾器,這樣做:

{% url name|my_filter %} 
+0

感謝您的回答。創建一個只調用django url解析器函數的自定義過濾器似乎有點多餘;這就是爲什麼我希望在模板中找到解決方案的原因。 – fstab

+0

順便說一句,'name'已經包含一個有效的urlpattern名字。 – fstab

+1

@niekas:您發佈的示例語法是針對過濾器,而不是標籤。 –

相關問題