在单个请求中组合多个 Django 模板
Posted
技术标签:
【中文标题】在单个请求中组合多个 Django 模板【英文标题】:Combining multiple Django templates in a single request 【发布时间】:2010-09-29 07:38:06 【问题描述】:我想知道是否有人可以帮助我找出解决以下问题的最佳方法。我正在构建一个使用 Django 模板来构建其 Web UI 组件的 Web 应用程序。有许多常见的 html 元素,例如页眉/页脚、HTML 标题、标头等。我想对这些进行一次编码,然后将它们与代表核心应用程序功能的其他模板“包含/组合”。
这可以使用 Django 模板吗?如果是这样,我该怎么做?
【问题讨论】:
【参考方案1】:你可以使用 django 的 extends
标签。假设您有页眉和页脚。你可以制作一个模板,比如说,foo.django:
<h1>My HTML Header</h1>
<!-- an so on -->
% block content %
% endblock %
<!-- html footer -->
然后,您可以制作另一个模板,例如 bar.django:
% extends "foo.django" %
% block content %
This overrides the content block in foo.django.
% endblock %
...然后会渲染:
<h1>My HTML Header</h1>
<!-- an so on -->
This overrides the content block in foo.django.
<!-- html footer -->
http://www.djangobook.com/en/1.0/chapter04/ 有关于 django 模板的良好说明。
【讨论】:
【参考方案2】:% extends %
和 % include %
方法适用于在上下文中不需要额外信息的页面元素。
只要您需要从数据库中向上下文中插入更多内容,模板标签就会派上用场。例如,Django 包含的 contrib.comments
app 定义了一个 % get_comment_list %
模板标签,用于检索附加到给定模型实例的 cmets。以下是您将如何使用它:
<div>
% load comments %
% get_comment_list for my_instance as comment_list %
% for comment in comment_list %
<p><a href=" comment.url "> comment.name </a> wrote:</p>
comment.comment
% endfor %
</div>
您可以将其保存在单独的模板中,并将% include %
保存在其他模板中。
对于您自己的内容,您可以编写自己的自定义模板标签。关注the documentation。只要有可能,使用simple tag 机制编写标签会很方便。您会在 djangosnippets.org 和 blogosphere 上找到方便的现成模板标签。
【讨论】:
【参考方案3】:试试% include %
标签。
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#include
【讨论】:
以上是关于在单个请求中组合多个 Django 模板的主要内容,如果未能解决你的问题,请参考以下文章
django:csrf_token 用于单个页面上的多个表单和 ajax 请求
GraphQL 在 Django 中的一个请求中进行多个查询
有没有办法可以在Django中的同一个模板中渲染多个视图?如果有最佳实践可以做到这一点?提前致谢