django - 使用 {{ block.super }} 跳过一个级别
问题描述
我有一个 3rd 方应用程序,它定义了一堆模板(有点类似于 django-admin 的工作方式)。基本模板定义了一个包含一些内容的块:
base.html:
<!doctype HTML>
<html><head>
<!-- blah blah -->
{% block very_kewl %}
<marquee><b><i><u>this is very kewl</marquee></b></i></u>
<!-- disclaimer: this is not valid HTML! -->
{% endblock very_kewl %}
</html>
然后子模板清除块:
actual_page.html:
{% extends 'base.html' %}
{# very many other stuff, part 1 #}
{% block very_kewl %}{% endblock %}
{# very many other stuff, part 2 #}
我想要实现的是在页面上保留“非常kewl”的内容。
一种可行的方法是简单地将整个复制actual_page.html
到项目模板目录中并省略该行{% block very_kewl %}{% endblock %}
。这可行,但缺点是我还必须重复模板的所有其他部分,其中一些可能在未来发生变化。
所以问题是我怎样才能从基本模板中显示“非常kewl”的内容,而不重复所有其他内容actual_page.html
?
理想情况下,我可以做这样的事情,但当然,这不起作用:
project_templates/actual_page.html:
{% extends 'actual_page.html' %}
{% block very_kewl %}{{ block.super.super }}{% endblock %}
解决方案
为什么不将基本模板块中使用的 HTML 保留为单独的模板?
project_template/partials/very_kewl.html
<marquee><b><i><u>this is very kewl</marquee></b></i></u>
<!-- disclaimer: this is not valid HTML! -->
现在,只需将它包含在需要使用 HTML 的任何地方。
project_template/base.html
<!doctype HTML>
<html><head>
<!-- blah blah -->
{% block very_kewl %}
{% include 'partials/very_kewl.html' %}
{% endblock very_kewl %}
</html>
而在孙子project_templates/actual_page.html
{% extends 'actual_page.html' %}
{% block very_kewl %}{% include 'partials/very_kewl.html' %}{% endblock %}
因此,即使在某些时候块被清除,该模板的子模板也可以简单地包含所需的 HTML。
推荐阅读
- django - 是什么导致 SMTPAuthenticationError
- fusionauth - 向 krakend 提供 JWT 普通令牌以进行签名
- android - 将 Alpha 页面转换器应用于 ViewPager
- javascript - 向 JSON 文件 URL 发出 GET 请求并存储响应,以便它可以在 Vue.js 应用程序启动时全局使用?
- python-3.x - 消息:尝试在未建立连接的情况下运行命令
- scala - size 和 sizeIs 的区别
- android - 资源 android:attr/dialogCornerRadius
- reactjs - 如何使用 react-router-dom 有条件地渲染路由?
- php - 当用户从 Oracle 在 PHP 应用程序中输入重复的主键时引发应用程序错误
- r - 小标题上的因子和标签