您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Django模板中复制数据的最佳方法是什么?

在Django模板中复制数据的最佳方法是什么?

看起来您的布局是可靠的。您有一个base.html模板,用于定义应用程序中每个页面的基本结构和外部布局。您还可以base_object.html扩展此模板。

您希望每个页面都有一个唯一的标题一个匹配的h1(我认为)。最好的方法是在base.html模板中定义两个单独的块。

<html>
    <head>
        <title>{% block title %}Default Title{% endblock %}</title>
    </head>

    <body>
        <h1>{% block h1 %}{% endblock %}</h1>
    </body>
</html>

在子模板中,如果希望它们相同,则需要覆盖这两个模板。我知道您认为这是违反直觉的,但是由于在Django中处理模板继承的方式,因此这是必须的。

来源:Django模板语言

最后,请注意,您不能{% block %}在同一模板中定义多个具有相同名称标签。存在此限制的原因是,块标签在“两个”方向上均起作用。也就是说,block标签不仅提供填充孔,还定义了填充父级孔的内容。如果{% block %}模板中有两个名称相似的标签,则该模板的父级将不知道要使用哪个块内容

孩子们看起来像这样:

{% extends "base.html" %}
{% block title %}Title{% endblock %}
{% block h1 %}Title{% endblock %}

如果这让您感到困扰,则应将每个对象的视图标题设置为模板变量。

{% block title %}{{ title }}{% endblock %}
{% block h1 %}{{ title }}{% endblock %}

Django努力将更多的逻辑排除在模板层之外。通常,标题是从数据库动态确定的,因此视图层是检索和设置此信息的理想场所。如果您想使用标题,则仍可以保留标题为空白(也许在中设置base.html,或者可以从django.contrib.sites软件包中获取网站名称

{{ block.super }}可能派上用场。这将允许您将父块的内容与子项的其他内容组合在一起。因此,您可以在基础中定义一个标题,例如“Stackoverflow.com”,然后进行设置

{% block title %}{{ block.super }} - Ask a Question{% endblock %}

在孩子中获得诸如“ Stackoverflow.com-提问”之类的标题

Go 2022/1/1 18:42:00 有347人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶