使用 Django 模板作为片段
Posted
技术标签:
【中文标题】使用 Django 模板作为片段【英文标题】:Using Django templates as snippets 【发布时间】:2012-03-15 17:29:37 【问题描述】:是否可以创建一个可以在另一个 django 模板中使用(嵌套)的 django 模板?我知道extends
命令,但我认为这不是我想要的。也许我只是不知道如何使它适用于这种情况。举个例子吧。
在大多数 webapps 中显示用户的登录状态是很常见的,我正在寻找一种方法来将此逻辑(带有相应的“Welcome Mr. Foo”和“需要注册?”)放入小模板,像这样:
loginstatus.html
% if LoggedIn %
Message message link link
% else %
Other message different link
% endif %
现在,我想我必须调用渲染引擎并将此输出存储到一个变量中,然后在渲染时将其传递给基本模板,这样我的基本模板如下所示:
index.html
<html>
<head>
</head>
<body>
<div id="Header"> LoginStatus </div>
</body>
</html>
现在,我知道这是一个非常蹩脚的例子,它只为我节省了 5 行代码,但我设想这样做是为了根据用户的角色创建一个导航栏,显示关于用户位置或所选兴趣的新闻提要等。
所以,简而言之,是否有可能(因为我无法让它按照我的设想工作)预渲染一个 django 模板,然后将该渲染的 html 包含到另一个 django 模板中?
我认为这并不重要,但我也在使用 Google App Engine,如果这有什么改变的话。
【问题讨论】:
【参考方案1】:对于该特定示例,您可以使用 include
标记来包含 sn-p。
对于导航栏和新闻提要,custom template tags - 特别是包含标签 - 会更合适。
【讨论】:
在 .96 和 1.2 版本的 Django 中完美运行(这些是 GAE 附带的)。我给你一个复选标记,因为你指出了这样一个优雅的解决方案,并提醒我在开始过度思考这些事情之前,我真的必须多读一点这些手册。我还没有签出自定义模板标签,但我会的。以上是关于使用 Django 模板作为片段的主要内容,如果未能解决你的问题,请参考以下文章
如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?