首页 > 解决方案 > 为什么 Django 会出现此错误:第 3 行的块标记无效:'else'

问题描述

我有以下 Django 模板:

{% if request.is_ajax %}
  {% extends "ajax.html" %}
{% else %}
  {% extends "base.html" %}
{% endif %}

当我渲染它时,我收到以下错误:

Invalid block tag on line 3: 'else'. Did you forget to register or load this tag?

为什么我会收到此错误?

标签: django

解决方案


{% extends %}如果您要使用它,标签必须是模板中的第一行。否则是无效的语法。但是,您可以使用变量。我会做以下事情:

def my_view(request):
    if request.is_ajax():
        base_template = "ajax.html"
    else:
        base_template = "base.html"
    ...
    context["base_template"] = base_template
    return render(request, "template.html", context)

然后在你的模板中

{% extends base_template %}
...

如果您不想将该逻辑添加到视图中,另一种方法是执行以下操作:

{% extends request.is_ajax|yesno:"ajax.html,base.html" %}
...

推荐阅读