【问题标题】:Passing variable urlname to url tag in django template将变量 urlname 传递给 django 模板中的 url 标签
【发布时间】:2011-03-04 16:38:50
【问题描述】:

我想要做的(对于最近的更改“小部件” - 在这种情况下不是 django 小部件)是将 urlname 作为变量传递到我的模板中,然后像这样使用它:{% url sitechangeobject.urlname %} 其中 urlname 是一个包含有效 URL 名称的字符串。

这可能吗?该模板一直在说它找不到 sitechangeobject.urlname 作为名称(这是完全正确的,它不存在)。有什么办法让它在那个变量里面看?

如果没有,还有其他方法可以解决这个问题,只是想我会检查一下。

谢谢!

【问题讨论】:

    标签: python django django-urls django-templates


    【解决方案1】:

    从 Django 1.3 开始,{% url %} 标签正确支持:

    {% url view_name_variable %}
    {% url 'view_name_string' %}
    

    ...这成为 Django 1.5 中的默认行为。

    以前,您只能选择这样做:

    {% url view_name_string %}
    

    要让标签在 Django 1.3 和 1.4 项目中以这种方式工作,您需要在使用它的每个模板的顶部添加以下行:

    {% load url from future %}
    

    根据Django 1.3 release notes

    ...在 Django 1.5 中,旧行为将被新行为取代。为确保与未来版本的 Django 兼容,应修改现有模板以使用新的未来库和语法。

    请注意,Django 1.9 中已删除对 {% load url from future %} 的支持。

    【讨论】:

    • 如何将变量连接到后缀字符串以形成 url? {% url variable-'suffix' %} 之类的东西当然行不通。
    • 对我来说似乎有点奇怪,但我认为您可以使用 |add 过滤器。即:{% url variable|add:'-suffix' %}add filter docs
    【解决方案2】:

    注意:这个答案只与 1.3 之前的 django 版本真正相关。如果您使用的是 django 1.3 或更高版本,则所需的功能是内置的 - 请参阅meshy's answer

    内置的url 标签无法做到这一点。然而django-reversetag 正是这样做的(以及更多)。

    根据readme,这段代码提供的reverse标签提供:

    • 一致的语法(“字符串文字”和变量)
    • 能够反转存储在上下文变量中的视图名称
    • 部分反转

    【讨论】:

      【解决方案3】:

      对于 django 1.5 可能有用吗

      通常,访问从视图传递的变量 我们用 {{变量}}

      但是,对于模板中的 url,以下内容不起作用: {% url 'app:namespace' {{varible}} %}

      只需使用以下内容即可: {% url 'app:namespace' 变量 %}

      【讨论】:

        【解决方案4】:

        如果您使用的是 Django 1.5 及更高版本,则不再需要 django-reversetags,只需将视图名称作为变量传递到模板中,以便在 url 标记中使用。

        我对 django-reversetags 的可用性感到困惑,只是想在这里正确更新问题。

        【讨论】:

        • 在 1.3 及更高版本中不需要。只需使用{% load url from future %}
        猜你喜欢
        • 2021-02-15
        • 2018-04-12
        • 2015-06-22
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 2019-07-31
        • 2020-04-24
        • 1970-01-01
        相关资源
        最近更新 更多