代码之家  ›  专栏  ›  技术社区  ›  user257111

将变量urlname传递到django模板中的url标记

  •  18
  • user257111  · 技术社区  · 14 年前

    我想做的是(对于最近的更改“widget”,而不是本例中的django widget)将urlname作为变量传递到我的模板中,然后这样使用它: {% url sitechangeobject.urlname %} 其中,url name是一个包含有效URL名称的字符串。

    这有可能吗?模板不断打破说它找不到SiteChangeObject.UrlName作为名称(这是非常正确的,它不存在)。有没有办法让它在这个变量中查找?

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

    谢谢!

    4 回复  |  直到 7 年前
        1
  •  29
  •   meshy    7 年前

    自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的未来版本兼容,应该修改现有模板以使用新的未来库和语法。

    注意支持 {% load url from future %} 已在Django 1.9中移除。

        2
  •  8
  •   Community rohancragg    7 年前

    注:此答案仅与1.3之前的django版本相关。如果您使用的是Django 1.3或更高版本,则所需的功能是内置的-请参见 meshy's answer .

    内置的 url 标记无法执行此操作。然而 django-reversetag 做的正是这个(以及更多)。

    根据自述文件, reverse 此代码提供的标签提供:

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

    为Django 1.5 可能这是有用的

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

    但是,对于模板中的URL,以下内容不起作用: %url'app:命名空间'变量%

    只需使用以下各项即可: %url'app:namespace'可变%

        4
  •  1
  •   binithb    11 年前

    如果您使用的是django 1.5及更高版本,那么不需要再使用django reversetags,只需将视图名称作为变量传递到模板中,即可在URL标记中使用。

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