这是相关的模板标签和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 %}
,则错误消失,但我的模板标记现在为空。
我做错了什么?
答案 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 %}