2009-10-16 36 views
1

如何反轉URL但使用不同的模板名稱?我特別要使用urlresolvers.reverseDjango:使用不同的模板反轉URL

更具體:

我有一個看法,但兩個URL從中可以訪問

(r'^url/$', 'view1', {'template1':'template1.html'}, 'access-url1'), 
(r'^url_dynamic/$', 'view1', {'template1':'template_dynamic.html'}, 'url-dynamic'), 

我不想寫任何代碼區分什麼模板在視圖中返回,因爲我可能想要隨時更改它。所以,我需要靈活地更改URL,同時呼籲它如

urlresolvers.reverse('view1', kwargs = {'template1':'template_dynamic.html'}) 
(which btw does not work throws noreversematch) 

我也可以只複製view1view2,並與URL的動態,但是這將違反DRY調用它。

+0

我們展示你這麼遠。網址不應與模板有關。 – 2009-10-16 11:39:40

+0

要展開 - URL映射到視圖,視圖可能會或可能不會以模板結束,並且任何一個視圖最終都會呈現多個(或不包含)模板。 – 2009-10-16 11:40:20

+0

@Dominic,最終結果crashekar想要的是合理的,但reverse()肯定不是正確的方式去那裏... – 2009-10-16 11:41:58

回答

2

urlresolvers.reverse逆轉kwargs匹配在regex模式,而不是kwargs通過字典傳遞,在URL中。

您可能想改爲使用reverse('url-name')變體。

對於你的情況將是:

urlresolvers.reverse('url-dynamic') 
+0

這工作正常。我在倒車時加入視圖名稱是癡迷的。 – crashekar 2009-10-16 13:05:54

1

如果你真的必須使用相反來完成這個,你可以做一些鬼鬼祟祟的與你的kwargs傳遞它的模板名稱。

倒檔函數簽名()看起來是這樣的:

reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None) 

您需要您的視圖函數接受一個模板名稱/字符串(可選的)參數。那麼你只是

{% url my.view.function "this_is_a_template.html" %} 
+0

我試着用模板名稱作爲kwargs的一部分,但是我得到了一個N​​oReverseMatch – crashekar 2009-10-16 11:54:27

+0

你不能使用reverse來傳遞任何不是導致你的函數開始的urlconf的一部分。你必須修改你的視圖函數和urlconf來完成這個工作。 – 2009-10-16 12:06:27