在Django中将一个块放在另一个块中

hek*_*ran 4 django templates django-templates

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

期望:

<form>
<div class="my_div">
  {% block div_content %}
    ...
  {% endblock %}
</div>
</form>
Run Code Online (Sandbox Code Playgroud)

模板:

{% block div_top %}{% endblock %}
<div class="my_div">
  {% block div_content %}
  {% endblock %}
</div>
{% block div_bottom %}{% endblock %}
Run Code Online (Sandbox Code Playgroud)

看着这个我不禁认为有更好的方法来做到这一点.Django的标准方法是什么?

Bri*_*uft 8

使用多个基本模板是我见过的一些团队使用的解决方案.例如,您可能只需添加名为"base_with_form.html"的其他基本模板.需要表单的模板扩展了此基本模板.

有一点帮助我的是考虑以类似于Python包的方式布局模板目录.我通常在每个目录(ala init .py)中包含一个base.html,即使它只是一个占位符.每个基本文件都在其父目录中扩展基本文件.通过添加具有所需更改的本地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")
Run Code Online (Sandbox Code Playgroud)