python - 如何使用 Django 模板作为组件?
问题描述
我有 5 个模板:index.html、detail.html、tag.html、login.html、register.html和base.html
所有 5 个模板都将扩展base.html。
index.html、detail.html、tags.html具有相同的<section>...</section>
html 代码部分和来自后端的相同数据。我想将此部分添加到base.html中,这样就不需要在 3 个不同的模板中重复 3 次.
但问题是,login.html 和 register.html确实需要这部分。
我知道无论是 React.js 还是 Vue.js,使用组件来解决它会很容易。
在Django中解决这个问题的任何好方法?
解决方案
编辑
正如评论中提到的OP,要求与我可以解释的完全不同。因此,根据我的新理解可以使用的修复方法就像在Tsang-Yi Shen 的评论{% include 'section.html' %}
中恰当地指出的那样。
base.html
:
<!-- HTML here.... -->
{% block normal_content %}{% endblock %}
section.html
<section>
<!-- Special Section -->
</section>
无论您想要该部分,只需包括section.html
login.html
以及所有其他需要特殊部分的:
{% extends "base.html" %}
{% block normal_content %}
Hey There!
{% block section %}
{% include 'section.html' %}
{% endblock %}
{% endblock %}
原始答案
塞尔丘克的回答很好地解释了这个概念。我通过提供代码示例以供将来参考来补充该答案。
考虑base.html
:
<!-- HTML here.... -->
<!-- Common Section -->
{% block section %}{% endblock %}
{% block normal_content %}{% endblock %}
<!-- End Common Section -->
现在为您的部分使用模板,baseWithSection.html
:
{% extends 'base.html' %}
{% block section %}
<section>
....
</section>
{% endblock %}
{% block special_content %}{% endblock %}
对于不包含该部分的所有页面,扩展base.html
如下:
{% extends 'base.html' %}
{% block normal_content %}
<!-- HTML here... -->
{% endblock %}
对于确实需要该部分的页面,请section.html
像这样扩展:
{% extends 'baseWithSection.html' %}
{% block special_content %}
<!-- Special HTML here, for templates pages requiring the section -->
{% endblock %}
推荐阅读
- python - 内存中numpy数组(图像,uint8)的有损压缩
- javascript - Chartjs 更新布局大小
- django - Django:在 __init__ 之前还是之后?
- eclipse - 在 Draw2D 中向 PolylineConnection 添加标签
- sql - 去除数字 - 在 sql impala 中只保留名称
- javascript - 将鼠标悬停在单元格上时,在表格单元格 (td) 的工具提示上获取表格标题 (th)
- r - 如何将 xml2::xml_find_all() 元素转换为 tibble 格式
- wordpress - 在 wordpress 管理仪表板中创建子菜单页面并创建添加新用户的副本
- synchronization - 括号 AEM 扩展超时
- javascript - 由于 childNode 值对 Div 进行排序