如何在默认情况下不包含另一个Django模板,同时保留模板中的标签?

watbbzwu  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(97)

我有以下几点
在设置中/base.py

SOME_TEMPLATE = os.getenv("SOME_TEMPLATE", "something/template.html")

TEMPLATES = [
    {
        # i skip ....
        "OPTIONS": {
            "context_processors": [
                # i skip...
                # for the project-specific context
                "core.context_processors.settings_values",
            ],

        },
    },
]

然后在core/context_processors.py中

from django.conf import settings

def settings_values(request):
    """
    Returns settings context variable.
    """
    # pylint: disable=unused-argument
    return {
        "SOME_TEMPLATE": settings.SOME_TEMPLATE,
    }

在实际模板中

{% include SOME_TEMPLATE %}

如果不改变或删除{% include SOME_TEMPLATE %},我可以做什么,这样在默认情况下,模板不包括在内?最好是在设置级别?
我想使用if标签,但我觉得它会更冗长。
例如:

{% if SOME_TEMPLATE %}
    {% include SOME_TEMPLATE %}
    {% endif %}

有没有一种方法可以不那么冗长,但仍然达到同样的结果?

2wnc66cl

2wnc66cl1#

最简单的解决办法似乎是:Iain Shelvington建议的备用空模板
另一种解决方案是编写一个特定的templatetag来完全按照您的要求执行该工作
<your_app>/templatetag/my_include.py为单位

@register.inclusion_tag("tags/my_include.html", takes_context=True)
def ms1_top_menu_children(context, template_var):
    include_context = {
        "template_var": template_var,
    }

    # if you need all the context in the included template ...
    include_context.update(context)
    # if you need all the context in the included template ...

    return include_context

<your_app>/templates/tags/my_include.html

{% if template_var %}
        {% include template_var %}
    {% endif %}

在html页面中

{% load my_include %}

...

    {% my_include SOME_TEMPLATE %}

...

**NB:**这样,您还可以移动templatetag代码中的所有settings_values(request)代码...

相关问题