Django改变了当前的URL名称和参数

时间:2012-12-14 13:07:15

标签: django django-templates django-urls

在我的Django网址中,我有许多以以下结尾的网址格式:

 (redirect/(?P<redirect_to>\w+))

这意味着这些网址可以(或不)以/redirect/TARGET/结尾。这些URL模式具有其他命名参数(主要是一个:pk

现在,我希望在这些URL模式使用的模板中,能够通过添加redirect_to参数来改变当前页面路径,并保持其他参数和URL反向名称不变。

我可以在模板中获取网址反向名称,方法是将resolve(path).url_name添加到当前上下文,然后将其与{% url %}模板标记一起使用。

我想知道是否有任何简单的方法可以动态地将参数(从resolve(path).kwargs)添加到URL反向标记?

1 个答案:

答案 0 :(得分:1)

我认为你应该为此创建一个custom tag(用{%url_redirect“your_new_destination”%}替换你的{%url%}标签。

在your_app / templatetags / my_custom_tags.py中:

from django.core.urlresolvers import reverse, resolve

@register.simple_tag(takes_context=True)
def url_redirect(context, new_destination):
    match = resolve(context.request.path)
    match.kwargs['redirect_to'] = new_destination
    return reverse(match.url_name, args=match.args, kwargs=match.kwargs)

在你的模板中:

{% load my_custom_tags %}
{% url_redirect "your_new_destination" %}

请注意,您需要将“django.core.context_processors.request”添加到TEMPLATE_CONTEXT_PROCESSORS,以便此代码段能够正常运行。