1

在我的 Django URL 中,我有许多以以下结尾的 URL 模式:

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

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

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

通过添加到当前上下文中,我能够在模板中获取 URL 反向名称,resolve(path).url_name然后将其与{% url %}模板标签一起使用。

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

4

1 回答 1

1

我认为你应该为此创建一个自定义标签(用 {% 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才能使此代码段正常工作。

于 2012-12-14T14:26:52.073 回答