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

时间:2010-06-16 21:26:57

标签: python django django-urls django-templates

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

这可能吗?该模板一直打破说它无法找到sitechangeobject.urlname作为名称(这是非常正确的,它不存在)。有没有办法让它看到变量?

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

谢谢!

4 个答案:

答案 0 :(得分:29)

从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 %}的支持。

答案 1 :(得分:8)

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

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

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

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

答案 2 :(得分:2)

对于django 1.5 可能这很有用

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

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

只需使用以下就可以了: {%url'app:namespace'varible%}

答案 3 :(得分:1)

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

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