【问题标题】:How can you define basic generic code blocks and insert them in other templates in Django?如何定义基本的通用代码块并将它们插入到 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 代码。

标签: python django templates generics


【解决方案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,则无法投票。
猜你喜欢
  • 2012-11-17
  • 2014-09-16
  • 2020-07-08
  • 2021-08-07
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
相关资源
最近更新 更多