【问题标题】:Any way to make {% extends '...' %} conditional? - Django有什么方法可以使 {% extends '...' %} 有条件? - 姜戈
【发布时间】:2011-07-19 20:30:26
【问题描述】:

我想在 AJAX 和常规 HTTP 调用之间共享一个模板,唯一的区别是一个模板需要提供 base.html html,另一个不需要。

有什么想法吗?

【问题讨论】:

    标签: python ajax django django-templates


    【解决方案1】:

    其他答案要求您传递一个额外的上下文变量。但是只要能访问到request对象就不需要了:

    {% extends request.is_ajax|yesno:"app/base_ajax.html,app/base.html" %}
    

    我发现这样更方便。

    【讨论】:

    • 有什么方法可以以类似的动态方式包含{% block 'someblock' %}
    • 超级好用,我们正在进行 A/B 测试并推出新的 UI,可变路由会导致大量工作。您应该得到绿色检查,因为这回答了问题。
    • 这解决了 django-compressor 离线压缩问题。
    • @TheoKouzelis 它是如何解决压缩问题的?据我了解,在这种情况下,django-compressor 将为app/base.html 情况创建缓存,但不会为app/base_ajax.html 创建缓存,这将在尝试加载缓存模板时失败(生成的离线清单中没有键)。
    【解决方案2】:

    使用变量。

    {% extends base_template %}
    

    在您的视图中,将其设置为“base.html”,或者一个新的“ajax.html”文件,它只提供块而不是其他任何东西。

    【讨论】:

    • 一个问题:这会破坏 django-compressor 离线压缩。
    【解决方案3】:
    {% extends override_base|default:'base.html' %}
    

    附:我知道这是一个老问题,但我在寻找答案时发现了它。也许它会帮助其他有同样问题的人。

    【讨论】:

      【解决方案4】:

      你可以使用 {% extends variable %}

      当您在视图中创建上下文时,传入一个变量基本模板名称。

      http://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#extends

      【讨论】:

        猜你喜欢
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 2020-08-17
        • 2011-02-27
        • 2011-08-28
        • 2011-01-31
        • 2017-10-15
        相关资源
        最近更新 更多