什么是 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:

更改为 urlssi

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

% extends "base.html" %

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

% 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 库和语法。

【讨论】:

@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”

未解决的参考:PyCharm 中的“django”错误

django中的python模块未正确导入

使用jquery post时未调用django formview中的post函数

CSS静态文件未在Django中加载

Django 1.11:模板中的 URL 函数未按预期工作