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



我有以下内容

在设置/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",
],
},
},
]

then in 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 %}

有没有一种方法既不那么冗长,又能达到同样的结果?

最简单的解决方案似乎是:Iain Shelvington建议的备用空模板

另一个解决方案可能是编写一个特定的templatetag来完成您想要的工作

in<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

in<your_app>/templates/tags/my_include.html

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

在你的HTML页面

{% load my_include %}

...
{% my_include SOME_TEMPLATE %}
...

注:这样你也可以把所有的settings_values(request)代码移动到templatetag代码中…

相关内容

  • 没有找到相关文章

最新更新