gpt4 book ai didi

Django:扩展还是包含?

转载 作者:行者123 更新时间:2023-12-04 00:48:53 27 4
gpt4 key购买 nike

我和我的 friend 发生了小争吵。在我当前的 Django 项目中,我创建了一个名为 menu.html 的文件,其中包含一组配置并格式化为列表的链接。我目前没有将菜单手动硬编码到每个页面中,而是使用以下 Django/Python 代码包含菜单:

{% include 'menu.html' %}

但是,我的 friend 建议这是不正确的方法。他说我需要使用扩展而不是包含,然后定义内容,如下所示:
{% extend 'menu.html' %}
{% block content %}
The rest of my content here.
{% endblock %}

这是一些额外的代码。我使用哪个真的很重要吗?我更愿意使用前者。

最佳答案

是的,这很重要。首先extends只能出现在文件的第一行。其次,include在解析堆栈上压入和弹出上下文对象,这意味着在上下文中创建的值在包含时将在返回时超出范围。

我的规则是:创建 base.html定义站点整体结构并使用大量 {% block foo %} 的模板文件关键区域周围。然后是所有其他模板 extends基础(或本身扩展基础的东西),然后根据需要替换这些块。
include ,另一方面,有利于封装你可能需要在多个地方使用的东西,甚至可能在同一页面上。

更新:

我一直在使用我自己的库 template_tags这么久了,我忘记了 Django 的模板语言在功能上仍然存在重大差距。这里有问题的标签来自一个名为 expr 的早期 django 片段。我对其进行了大量编辑和扩展。例如,您可以说 {% expr 'Fred' as name %} (或任何有效的 Python 表达式),并将结果存储在当前上下文的“名称”槽中。如果这发生在 included模板, name的值将在退出模板文件时弹出。

您可以使用 {% with %} 来实现这一点。标签,但是 expr给了我更大的灵活性,包括进行任意复杂的调用。这最初是在必须创建复杂的缓存对象时出现的,这些对象需要在 View 中无法完成的昂贵的 DBMS 交互,必须在模板本身中调用它们。

如果您需要更深入地了解这一点,请给我发电子邮件(在我的个人资料中)。

关于Django:扩展还是包含?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2323020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com