【问题标题】:Django: Invalid block tag: 'endif'Django:无效的块标签:'endif'
【发布时间】:2016-01-26 16:29:56
【问题描述】:

这里是相关的模板标签和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 %},那么错误就会消失,除了我的模板标签现在是空白的。

我做错了什么?

【问题讨论】:

    标签: django


    【解决方案1】:

    不能将extends 标签放在 if 语句中。来自the docs on template inheritance

    如果您在模板中使用{% 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 %}
    

    【讨论】:

      猜你喜欢
      • 2015-09-16
      • 2012-06-28
      • 2023-03-26
      • 2015-07-08
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2015-02-10
      相关资源
      最近更新 更多