【问题标题】:How to inject template context variable only if it doesn't exist仅当模板上下文变量不存在时如何注入它
【发布时间】:2012-08-09 01:59:41
【问题描述】:

我有一个使用上下文变量my_context_varbase_template.html。我所有的其他模板都扩展了这个基本模板。你能帮我回答这些问题之一吗? (它们只是看待同一个潜在问题的不同方式)

  1. 如何使my_context_var 可用于所有派生模板,但允许为特定视图覆盖my_context_var

  2. 只有当该变量不存在时,我如何才能将my_context_var 注入到模板上下文中。

本质上,我正在寻找上下文变量的 setdefaults() 功能。如果有帮助,my_context_var 基本上是一个空白搜索表单,可在我网站的大多数页面中找到。我需要为一个同时显示表单和结果的页面覆盖它。当前的问题是,即使对于该结果页面,我也不断收到空白表单。

【问题讨论】:

    标签: django django-templates django-context


    【解决方案1】:

    你有几个选择:

    您可以创建自己的 RequestContext 并通过您的站点包含您想要的所有变量:Documentation

    或者您可以创建模板标签并在任何模板中访问它们:Documentation

    【讨论】:

    • 看起来模板标签是要走的路,至少对我来说是这样。
    【解决方案2】:

    因为它应该适用于您的所有视图,所以最好的选择是create a custom context processor。模板标签的缺点是您必须在需要此变量的任何地方包含它们。创建您自己的RequestContext 作为 D.A.在我看来,陈述是矫枉过正的。

    【讨论】:

    • 我尝试了上下文处理器路由,但似乎没有办法检查当前上下文并检查my_context_var是否存在
    • 你能发布你的上下文处理器定义的代码吗?没有它,很难得到什么是失败的。
    • 对不起,我的意思是创建一个上下文处理器,但一定要使用 RequestContext。我的话有时会被打断。
    • 是的,我明白了。只是想看看你的上下文处理器的实现。
    • 上下文处理器真的很简单:
    【解决方案3】:

    如果您想在模板中设置变量(但前提是它不存在),以下应该可行:

    {% with my_context_var=my_context_var|default:"Value you want to set it to" %}
        {# The variable is accessible within then with block #}
        {{ my_context_var }}
    {% endwith %}
    

    【讨论】:

    • 这不会设置 my_context_var 仅当它不在上下文中时,如果它不是 True 则设置它,这不是一回事。例如,如果 my_context_var 设置为空列表,您将获得默认值。
    猜你喜欢
    • 2012-10-09
    • 2018-03-25
    • 2016-03-28
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2013-06-07
    相关资源
    最近更新 更多