django - 在 Django 中将一个 block 放入另一个 block 中

标签 django templates django-templates

我有一个 Django 模板,我想在多个地方扩展它。在某些情况下,div 必须位于表单内,而在其他情况下则不能。为此,我在 div 上方和下方放置了一个 block ,以便我可以分别在其中添加 和 。

期望:

<form>
<div class="my_div">
  {% block div_content %}
    ...
  {% endblock %}
</div>
</form>

模板:

{% block div_top %}{% endblock %}
<div class="my_div">
  {% block div_content %}
  {% endblock %}
</div>
{% block div_bottom %}{% endblock %}

看到这里我不禁想到有更好的方法来做到这一点。 Django 的标准方法是什么?

最佳答案

使用多个基本模板是我见过一些团队使用的解决方案。例如,您可以添加一个名为“base_with_form.html”的附加基本模板。需要该表单的模板扩展了此基本模板。

对我有帮助的一件事是考虑以类似于 Python 包的方式布局模板目录。我通常在每个目录中包含一个 base.html(ala init.py),即使它只是一个占位符。每个基本文件都扩展其父目录中的基本文件。通过添加具有所需更改的本地 base.html 副本,可以完成同一目录中多个模板的样式的其他特化。

例如:

templates/
  base.html
  index.html (extends "base.html")
  accounts/
    base.html (extends "base.html")
    affiliate_base.html (extends "base.html")
    my_account.html (extends "accounts/base.html")
    affiliate_dashboard.html (extends "accounts/affiliate_base.html")
    vips/
      base.html (extend "accounts/base.html")
      vip_lounge.html (extends "accounts/vips/base.html")

关于django - 在 Django 中将一个 block 放入另一个 block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2437123/

相关文章:

C++ 在模板中重载 operator=

javascript - 在实际元素环境 (Django) 中鼠标悬停时后台移动的工作 Jsfiddle 示例不起作用?

django - 在同一个for循环中遍历django模板中的多个列表

Django - 在模板的for循环中迭代数字

django - Django表单集无效

c++ - 在运行时选择正确的模板特化

python - 具有多个参数的自定义模板标签

python - Django 邮件未保存(文件后端)

python - 在 Django 模板中错误传递带有空格的字符串

c++ - 为什么在有时需要类型作为指针的地方使用模板类型时会出现错误 C2768?