【问题标题】:How does Django's extends work?Django 的扩展是如何工作的?
【发布时间】:2023-04-03 20:10:01
【问题描述】:

我的 index.html 文件位于 /templates 目录中,而另一个 index.html 文件位于 /templates/hello 中。

我在/templates/hello 中创建了一个名为templates.html 的文件,它应该扩展index.html。

我可以使用 {% extends index.html %} 标记使 template.html 扩展两个 index.html 文件(来自两个目录)吗?

谢谢。

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    您不能从多个 django 模板扩展。它是单行继承。

    如果您希望/templates/index.html 成为您的基本索引模板,并且/templates/hello/index.html 成为您应用程序的 hello 部分的索引模板。那么您应该让/templates/hello/index.html{% extends 'index.html' %} 开头。

    使用 Django 模板要理解的是基本模板..“扩展”的模板是模板..并且该模板中的所有内容都将显示在块标记内或之外。

    当您“扩展”模板时,任何声明的与扩展模板中的块匹配的块都将覆盖这些块的内容。

    大多数网站/应用程序在页面之间都有或多或少一致的布局。因此,典型的模板设置是拥有一个包含页面所有不同部分的块的主模板,并使用 div 和 css 以您想要的方式安排布局。将尽可能多的常用 html.. 内容从一个页面更改为下一个页面,在该基本模板中,并确保基本模板包含您在扩展模板时需要填写的任何内容的块。这些块可以包含默认 html,如果扩展模板不覆盖该块,则会显示该 html。或者它们可以是空的。

    然后,对于您需要的每个新模板变体,扩展主模板并仅覆盖那些需要填充或覆盖的块。

    不要将扩展视为将基本模板的代码引入扩展它的模板中。Django 模板不是这样工作的。将基本模板视为具有页面所有基本构建块的模板,然后扩展修改它扩展的模板块。

    如果您有不同的情况需要在不同的模板中定义页面的各个部分,并且您希望将它们拼凑在一起,那么您正在寻找的是{% include 'templatename' %} 标记。

    【讨论】:

    • 感谢您的回复。因此,我尝试仅从 /templates/hello 的 index.html 扩展,但每当我将 {% block blash %}{% endblock%} 放入 index.html 时,它只会显示一个空白页面。知道我做错了什么吗?注意:我的 template.html 存在于同一目录中。
    • 您的模板似乎扩展了位于/templates/ 目录中的index.html,而不是在/templates/hello 中,因为Django 首先找到了它。您应该在扩展标签中使用命名空间:{% extends 'hello/index.html' %}
    • 我试过了,但是没有用。它只是显示空白页......这看起来很奇怪。我原以为会出现一些错误。
    • 更具体地说,显示您的templates/hello/index.htmltemplates/hello/template.html 和您的 django 知道的模板目录列表 - 要在回溯中获取它,只需在您的视图中设置一些不存在的模板调试。
    • 请告诉我们您正在尝试完成的工作,但没有成功。提供帮助会容易得多。我已经更新了我的答案,以使整个继承的事情更加清晰。基本上,基本模板中的块中的任何内容都将被扩展它的任何模板中的同名块覆盖。
    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    相关资源
    最近更新 更多