Django:使用不同的模板反转URL

时间:2009-10-16 11:31:28

标签: django django-urls

如何反转网址但使用不同的模板名称?我特别需要使用urlresolvers.reverse

更具体一点:

我有一个视图,但有两个可以访问的网址

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

我不想编写任何区别在视图中返回哪个模板的代码,因为我可能想要动态更改它。所以我需要灵活地在调用url时更改url,例如

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

我也可以将view1复制到view2并使用url-dynamic调用它,但这会违反DRY。

2 个答案:

答案 0 :(得分:2)

urlresolvers.reverse撤消与kwargs模式中的regex匹配的reverse('url-name'),而不是通过dict传递的kwargs。

您可能希望使用urlresolvers.reverse('url-dynamic') 变体。

对于你的情况,它将是:

{{1}}

答案 1 :(得分:1)

如果你真的必须使用反向来完成这个,你可以偷偷摸摸地用你的kwargs向它传递模板名称。

reverse()的函数签名如下所示:

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

您需要使用视图函数接受模板名称/字符串作为(可选)参数。那你就是

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