如何反转网址但使用不同的模板名称?我特别需要使用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。
答案 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" %}