我想做什么(对于最近的更改'小部件' - 在这种情况下不是django小部件)是将urlname作为变量传递到我的模板中,然后像这样使用它:{% url sitechangeobject.urlname %}
其中urlname是一个包含url的有效名称的字符串。
这可能吗?该模板一直打破说它无法找到sitechangeobject.urlname作为名称(这是非常正确的,它不存在)。有没有办法让它看到变量?
如果没有其他方法可以解决这个问题,只是想我会检查。
谢谢!
答案 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.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的可用性感到困惑,只是想在这里正确更新问题。