20

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

4

2 回答 2

9

这是由于对1.3 中制定的标签的更改:url

更改为urlssi

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

{% extends "base.html" %}

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

{% extends templ %}

也是合法的。

然而,由于历史的一次偶然性,url又有ssi所不同。这些标签使用第二种无引号语法,但将参数解释为常量。这意味着不可能使用上下文变量作为 aurlssi标记的目标。

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

{% url sample %}

应替换为:

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

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

于 2012-06-26T10:57:04.583 回答
5

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

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

在这种情况下,只需引用传递给url-tag的 url 。那就是{% url someurl %}应该成为{% url 'someurl' %}。感谢Ignacio VA为我指明了这个方向。

于 2013-08-01T21:58:48.807 回答