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

18 python django django-templates django-urls

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

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

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

谢谢!

mes*_*shy 29

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

{% url view_name_variable %}
{% url 'view_name_string' %}
Run Code Online (Sandbox Code Playgroud)

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

以前,您只能选择执行此操作:

{% url view_name_string %}
Run Code Online (Sandbox Code Playgroud)

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

{% load url from future %}
Run Code Online (Sandbox Code Playgroud)

根据Django 1.3发行说明:

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

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

  • 对我来说似乎有些奇怪,但是我认为您可以使用`| add`过滤器。即:“ {%url变量|添加:'-后缀'%}”(请参阅​​[添加过滤器文档](https://docs.djangoproject.com/zh/1.4/ref/templates/builtins/?from=olddocs#加)。 (2认同)

msa*_*ers 8

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

内置url标记无法执行此操作.然而,django-reversetag确实如此(以及更多).

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

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