1

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

更具体:

我有一个视图,但有两个可以访问它的 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-dynamic 调用它,但这会违反 DRY。

4

2 回答 2

2

urlresolvers.reversekwargs在 url中与模式中的那些匹配的反转,regex而不是通过 dict 传递的 kwargs。

您可能想改用该reverse('url-name')变体。

对于您的情况,它将是:

urlresolvers.reverse('url-dynamic')
于 2009-10-16T12:18:31.900 回答
1

如果您真的必须使用 reverse 来完成此操作,您可以对您的 kwargs 做一些偷偷摸摸的事情来将模板名称传递给它。

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

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

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

{% url my.view.function "this_is_a_template.html" %}
于 2009-10-16T11:39:52.520 回答