有没有办法为django中的所有模板指定默认的基本模板?

时间:2014-07-12 04:08:11

标签: python django django-templates

我进入Django需要2个小时,我想知道是否有办法指定一个默认的基本模板,该模板将自动加载到所有模板中,这样您就不必重复自己并指定{% extends "foo.html" %} at每个页面模板的顶部。

例如,在项目或应用程序级别,某些元数据(设置)可以指定使用的默认模板,除非调用render或模板本身指定不应包含模板。 一世。即render(... other args..., layout=null){% noextends "foo.html" %}

这有效地将选择加入的风格转变为选择退出,根据我的经验,这是首选。鉴于它是在类似设置的东西中指定的,它不是“魔法”而且打破了Django的精神。

我查看了文档,默认情况下这似乎不可用。我想我可以做一些事情,比如覆盖内置的渲染例程,尝试将{% extends "foo.html" %}调用连接到每个模板,但我希望互联网可以告诉我已经有一个我缺少的解决方案

3 个答案:

答案 0 :(得分:1)

除非你想编写自己的模板加载器函数来查看你的默认设置和猴子补丁,然后“不,没有办法做到这一点”是准确的。

至少每个文件只有一行。

另外,作为一个长期存在的Django约定,其他开发人员将立即能够看到使用了哪个基本模板(在更复杂的项目中,您可能会发现使用不同的基本模板,具体取决于用户类型)。

最后,正如Python的Zen所说,显性比隐含更好。 : - )

答案 1 :(得分:1)

不要忘记,它是Python中的指导原则 - 因此也是Django中的指导原则 - 显式优于隐式。因此,例如,Rails强调约定优于配置,并且各种各样的事情都是自动发生的,这与Python的处理方式非常不同。

所以不,没有办法让Django自动从基础继承模板。虽然您可能通过创建自定义模板加载器来实现这一点,但这不是一个好主意,因为它会让所有其他人看到您的项目时感到困惑。

答案 2 :(得分:-2)

你试过吗

{% include "foo.html" %}