什么是Django中的“从未来加载网址”

时间:2012-06-26 10:52:02

标签: django

当我有时阅读django代码时,我会在一些模板中看到“从未来加载url”。我不太确定这是什么,但我知道它与URL有关。如何以及何时使用来自未来的加载网址?

2 个答案:

答案 0 :(得分:9)

这是由于a change to the url tag在1.3中实施的:

  

urlssi

的更改      

大多数模板标签允许您将常量或变量作为参数传递 - 例如:

{% extends "base.html" %}
     

允许您将基本模板指定为常量,但如果您有一个包含值templ的上下文变量base.html

{% extends templ %}
     

也是合法的。

     

但是,由于历史事故,urlssi不同。这些标记使用第二种无引号语法,但将参数解释为常量。这意味着无法使用上下文变量作为urlssi标记的目标。

     

Django 1.3标志着纠正这一历史事故的过程的开始。 Django 1.3添加了一个新的模板库 - future - 提供了urlssi模板标记的替代实现。这个future库实现行为使得第一个参数的处理与处理所有其他变量一致。因此,现有模板包含:

{% url sample %}
     

应替换为:

{% load url from future %}
{% url 'sample' %}
     

实现旧行为的标记已被弃用,在Django 1.5中,旧行为将被新行为替换。为确保与未来版本的Django兼容,应修改现有模板以使用新的future库和语法。

答案 1 :(得分:4)

由于以下与模板相关的显着异常,我将把它放在一个单独的答案中:

如果从django模板(Django版本> 1.4)解析器中抛出django.core.urlresolvers.NoReverseMatch异常,则可能只是在模板中使用{% load url from future %}

在这种情况下,只需引用传递给url-tag的网址即可。那{% url someurl %}应该成为{% url 'someurl' %}。感谢 Ignacio VA 指示我朝这个方向发展。