在单个请求中组合多个 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 请求

使用多个键值进行 django html 模板请求

GraphQL 在 Django 中的一个请求中进行多个查询

有没有办法可以在Django中的同一个模板中渲染多个视图?如果有最佳实践可以做到这一点?提前致谢

如何在 django 的 AJAX 请求中返回多个 JSON 对象

我们可以在 django 的单个 html 模板中扩展多个 html 吗?如果可以,那么如何?