如何定义基本的通用代码块并将它们插入到 Django 的其他模板中?
Posted
技术标签:
【中文标题】如何定义基本的通用代码块并将它们插入到 Django 的其他模板中?【英文标题】:How can you define basic generic code blocks and insert them in other templates in Django? 【发布时间】:2018-04-10 12:15:16 【问题描述】:我想让我的 html 网站由单个通用模块组成,类似于这个伪代码。
% block body % // Just a block inside the base html template file
<div class="container_main">
% block generic_sub_menu % // This should be replaced with a generic submenu, which is defined in another html template file
% endblock %
Blah Blah Blah
% block generic_map_display % // This should be replaced with a generic map display, which is defined in another html template file
% endblock %
</div>
% endblock %
所以,我知道如何使用基本模板并插入更具体的模板的主体,它扩展了基本模板。但是,如何制作一个可以在任何地方使用的模板,其中包含一些通用 HTML 代码,这些代码不扩展特定模板,但可以用于导入其他模板的一些通用代码块?
有没有办法用块来做到这一点,还是我必须研究 Django 框架中的其他一些技术?
【问题讨论】:
最好举个例子来说明你想要达到的目标。你的问题我不清楚。 我真的没有任何例子,因为我不知道如何做到这一点。但是应该发生的是,整个主体块中的两个块语句应该替换为在另一个 html 模板文件中找到的 html 代码。 【参考方案1】:假设您在项目 templates/message_display.html 的模板目录中有一个文件,其中包含以下代码
% if messages %
% for message in messages %
<div>
<h5> message </h5>
</div>
% endfor %
% endif %
所以上面的代码用于显示成功或警告消息等消息,现在我们可以在任何模板中的任何位置使用它,下面的代码
% include "message_display.html" %
【讨论】:
这正是我想要的,谢谢。但是如果我有很多“模块”,就会有很多文件,当项目增长时,这会使编辑和使用这些文件变得更加复杂。那么有没有办法将文件压缩成一个或类似的东西? 我不明白您到底在问什么,但很明显,您正在寻找管理 Django 项目的最佳方法。为此,我建议您搜索“django 最佳实践”,如果可能,请阅读“Two scoops of Django”一书 感谢您的建议。我要说的是,如果我只使用 include 语句,我需要为每个要包含的代码块创建一个单独的文件,对吗?这意味着如果我想要一个 message_display、map_display、message_writer、message_list 等等,我需要为每个文件创建一个文件,但如果我有很多文件,那会变得很乱,所以我想知道你是否知道一种解决方案,其中单个文件包含所有代码,但仍可以仅包含部分代码。 您可以在模板目录中创建一个目录(例如 sn-ps )专门用于这些小代码块,然后您可以使用 % include "sn-ps/message_display.html" % 或 % include "sn-ps/map_display.html" % 我觉得这样会更整洁。 这就是我将要做的,当我在编辑器中打开它时可能仍然有点乱,但这是我目前拥有的最佳选择。谢谢【参考方案2】:您可以将常用的html代码保存在静态文件夹中
如果您的 settings.py 有以下行
STATIC_URL = '/static/'
您必须创建一个以您的应用名称为名称的文件夹,并在其中保存您的文件
在你的模板文件中你必须调用
<script src="% static "<appname>/<file name>" %"></script>
另外,要从其他模板调用一个模板,您必须在模板中使用下面的一行
<div class="basic">
% include "main/includes/subtemplate.html" %
</div>
更多详情请参考How do you insert a template into another template?
【讨论】:
我知道该怎么做,这实际上已经发生在 base.html 和 index.html 文件中(index.html 正在扩展 base.html),但我想要做的是导入文件中的代码,例如 generic.html,它应该包含特定用途的代码块。 谢谢,这是我一直在寻找的行为。 我知道,但你和 karansthr 有相同的解决方案,我只能将一条评论标记为答案,如果声誉低于 15,则无法投票。以上是关于如何定义基本的通用代码块并将它们插入到 Django 的其他模板中?的主要内容,如果未能解决你的问题,请参考以下文章