如何定义基本的通用代码块并将它们插入到 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 的其他模板中?的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历一组动态表单输入并将它们插入到多个表中?

在文件中间插入一个字节块而不重写所有内容?

在PHP中传播变量

如何生成随机数并将它们插入优先级队列?

如何从一个表列中获取值,将它们与字符串连接并将它们插入另一个表中?

python 定义一个插入数据(可以插入到每个表中)通用的方法