我有以下内容
在设置/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
代码中…