Django:无效的块标记:' endif'

时间:2015-10-27 10:07:38

标签: django

这是相关的模板标签和html:

from django import template
from django.conf import settings

register = template.Library()


@register.inclusion_tag('auth_backend/templatetags/extends_layout.html')
def extends_layout():
    layout_template = getattr(settings, 'AUTHBACKEND_LAYOUT_TEMPLATE', '')
    return {'layout': layout_template}


{% if layout %}
  {% extends layout %} <<<<<<<<<<<<< Problem here
{% endif %}

当我在视图中使用它时,我收到以下错误:

{# Sample view #}
{% load auth_backend_tags %}
{% load staticfiles %}

{% extends_layout %}

Django: Invalid block tag: 'endif'

如果删除{% extends layout %},则错误消失,但我的模板标记现在为空。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

无法将extends标记放在if语句中。来自the docs on template inheritance

  

如果您在模板中使用{% extends %},则它必须是该模板中的第一个模板标记。否则,模板继承将不起作用。

您可以通过使用带有extends标记的变量而不是包含标记来实现您想要的效果。您可以在视图中设置变量,也可以使用上下文处理器。

def my_view(request):
    extends = getattr(settings, 'AUTHBACKEND_LAYOUT_TEMPLATE', 'default_base.html')
    return render(request, 'my_template.html', {'extends': extends })

然后在my_template.html

{% extends extends %}