You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何通过if条件块动态选择要继承的模板

Django模板动态继承实现方案

原写法失效原因

Django的模板解析规则要求{% extends %}标签必须是模板文件中的第一个标签,你将其嵌套在if块中的写法不符合解析规则,因此无法生效。

可行实现方案

方案1(推荐):视图层传递继承模板变量

将路径判断逻辑放到视图层处理,避免模板和路由逻辑耦合,代码可维护性更高:

  1. 视图中给上下文添加待继承的模板变量:
def your_view(request):
    # 其他业务逻辑
    if 'project' in request.get_full_path():
        base_template = 'index.html'
    else:
        base_template = 'base.html'
    context = {
        'form': form,
        'base_template': base_template
    }
    return render(request, '当前模板的文件路径.html', context)
  1. 调整后模板写法:
{% extends base_template %}

{% load crispy_forms_tags %}

{% block title %} Network {% endblock title %}

{% block content %}
<div class="row">
  <div class="col-md">
    <div class="card card-body">
      <h6>Update</h6>
      <form class="" action="" method="post" enctype="multipart/form-data">
        {% csrf_token %}
          {{form|crispy}}
        <input type="submit" name="" value="Update">
      </form>
    </div>
  </div>
</div>
{% endblock %}

方案2:模板内直接写判断表达式

如果不想修改视图代码,也可以直接把判断逻辑写在extends标签的参数中,无需嵌套if块:

{% extends 'index.html' if 'project' in request.get_full_path else 'base.html' %}

{% load crispy_forms_tags %}
<!-- 剩余模板内容和你原来的写法保持一致即可 -->

内容的提问来源于stack exchange,提问作者aba2s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:15:06