【问题标题】:Django alter current URL name and argumentsDjango 更改当前 URL 名称和参数
【发布时间】:2012-12-02 11:47:18
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 不确定你是否想要这个{% url url_name my_kwarg1='any_value' my_kwarg2=context_var %}你的问题令人困惑。
  • 我不确定我理解你的意思。您是否打算将重定向逻辑添加到实际模板中?
  • 我最初的目标是创建三个不同的表单,每个表单在提交表单时重定向到不同的位置。所以我需要有一种方法可以在以/redirect/FOO 结尾的页面中获取更改后的URL。答案中给出的模板标签可以完成这项工作,但是我最终使用提交按钮名称的组合完成了我必须做的事情(提交按钮的名称属性在提交表单时作为空键传递给服务器)并覆盖基本 FormView 中的 get_success_url()。
  • @AamirAdnan 如果我在每次调用时准确地知道 kwargs 列表,这将起作用。

标签: django django-templates django-urls


【解决方案1】:

我认为您应该为此创建一个custom tag(将您的 {% url %} 标记替换为 {% url_redirect "your_new_destination" %})。

在 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 才能使这个 sn-p 工作。

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2012-11-27
    • 2019-08-22
    • 2019-06-15
    • 2016-12-18
    • 2011-01-30
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多