什么是 Django 中的“从未来加载 url”
Posted
技术标签:
【中文标题】什么是 Django 中的“从未来加载 url”【英文标题】:What is "load url from future" in Django 【发布时间】:2012-06-27 16:17:10 【问题描述】:当我有时阅读 django 代码时,我会在一些模板中看到“从未来加载 url”。我不太确定这是什么,但我知道它与 URL 有关。未来应该如何以及何时使用这个加载 URL?
【问题讨论】:
我还想在这些答案中看到什么——这个标签什么时候会从未来消失? Django 1.4 是一个 LTS,然后可能 1.8 将是另一个(但 Django 项目没有承诺)。我什么时候需要再次挖掘我的应用程序,这次删除这个未来的导入?url from future
在 django 1.9 中被移除。见github.com/sehmaschine/django-grappelli/issues/648
【参考方案1】:
这是由于 1.3 中制定的a change to the url
tag:
更改为
url
和ssi
大多数模板标签都允许您将常量或变量作为参数传递——例如:
% extends "base.html" %
允许您将基本模板指定为常量,但如果您有一个包含值
base.html
的上下文变量templ
:% extends templ %
也是合法的。
但是,由于历史的意外,
url
和ssi
是不同的。这些标签使用第二种无引号语法,但将参数解释为常量。这意味着不可能将上下文变量用作url
和ssi
标记的目标。Django 1.3 标志着纠正这一历史性事故的进程的开始。 Django 1.3 添加了一个新的模板库——
future
——它提供了url
和ssi
模板标签的替代实现。这个future
库实现了使第一个参数的处理与所有其他变量的处理一致的行为。因此,现有模板包含:% url sample %
应替换为:
% load url from future % % url 'sample' %
实现旧行为的标签已被弃用,在 Django 1.5 中,旧行为将被新行为替换。为确保与未来版本的 Django 兼容,应修改现有模板以使用新的
future
库和语法。
【讨论】:
@lakesh my answer to a related question上有解释。 ahhh,它的意思是'加载 url 标签的 Django 1.5 实现'。我一直认为一定有一些疯狂的 n 阶装饰器函数延迟加载类型的东西。不知何故,模板能够加载一个尚不存在的 url????...我的头进去了...我太害怕了,不敢看代码。【参考方案2】:由于以下与模板相关的显着异常,我将把它放在一个单独的答案中:
如果您在 django 模板(Django 版本 >1.4)解析器中抛出 django.core.urlresolvers.NoReverseMatch
异常,则可能只是在模板中使用了 % load url from future %
。
在这种情况下,只需引用传递给 url-tag 的 url。那就是% url someurl %
应该变成% url 'someurl' %
。感谢 Ignacio VA 为我指明了这个方向。
【讨论】:
以上是关于什么是 Django 中的“从未来加载 url”的主要内容,如果未能解决你的问题,请参考以下文章
django 中的 Jquery:未捕获的类型错误:无法读取 null 的属性“createDocumentFragment”