我在模板中写了以下内容。是否可以缩短该代码,因为request.resolver_match.namespaces
当前是其中的两倍?
{% if 'admin' not in request.resolver_match.namespaces and 'website' not in request.resolver_match.namespaces %}
答案 0 :(得分:0)
您可以:
使用一个{% with %}
块
{% with namespaces=request.resolver_match.namespaces %}
{% if 'admin' not in namespaces and 'website' not in namespaces %}
...
{% endif %}
{% endwith %}
使用上下文处理器
def add_namespace(request):
return {'namespaces': request.resolver_match.namespaces}
{% if 'admin' not in namespaces and 'website' not in namespaces %}
或:
def check_namespace(request):
invalid_namespaces = ['admin', 'website']
namespaces_valid = all(
s not in request.resolver_match.namespaces
for s in invalid_namespaces
)
return {'namespaces_valid': namespaces_valid}
您必须在context_processors
设置中将路径添加到TEMPLATES
的可调用对象列表。
创建一个自定义模板过滤器来进行检查:
# your_app/templatetags/namespaces.py
@register.filter
def namespaces_valid(value):
invalid_namespaces = ['admin', 'website']
return all(
s not in request.resolver_match.namespaces
for s in invalid_namespaces
)
{% load namespaces %}
{% if request.resolver_match.namespaces|namespaces_valid %}
但是,我将退后一步,检查在尝试将模板绑定到URL上是否是一个好主意。我的猜测是您想在全局基本模板中做一些特定于应用程序的工作。也许您可以使用中间的基本模板并使用{% block %}
来实现此目的:
# base.html, which currently contains your {% if ... %}
{% block not_admin_or_website %}
{% endblock %}
# base_not_admin_or_website.html
{% extends 'base.html' %}
{% block not_admin_or_website %}
... # whatever is in your if right now
{% endblock %}