如何在Django模板中更有效地编写它,这样它就不会成为一个巨大的if语句?我想禁用request.path中的所有页面的元素和某些页面的一些例外。这是我到目前为止所得到的
{% if "/create-account/" in request.path or "/lists/" in request.path or "/contact-us/" in request.path or "/news/" in request.path %}
{% else %}
{% include 'includes/element.html' %}
{% endif %}
必须有更好的方法。 澄清我的需求:
在除X,Y或Z之外的所有页面上显示此元素。
答案 0 :(得分:1)
我能想到的最短路径是在上下文数据中包含一个上下文变量,用于那些需要显示它的网址
# views
{ 'ignore_element': ':)' }
# template
{% if not ignore_element %}
{% include 'includes/element.html' %}
{% endif %}
这可以起作用,因为它仅显示那些不包含此上下文值的那些。
任何更好的解决方案选择都取决于为什么这4个应该免于显示它的逻辑
答案 1 :(得分:1)
我不会直接使用请求对象。
def contact_us(request):
my_context = {
"hide_element_include": True
}
return render_to_response('my_template.html',
my_context,
context_instance=RequestContext(request))
{% if hide_element_include %}
{% else %}
{% include 'includes/element.html' %}
{% endif %}
答案 2 :(得分:1)
在大多数情况下,尝试保留模板的逻辑 。假设这个页面由Django控制器提供服务,你需要做的就是为你想要隐藏元素的每个URL添加一个标志。
def contact_us(request):
context = {
"hide_element": True
}
return render('my_template.html', context);
模板:
{% if not hide_element %}
{% include 'includes/element.html' %}
{% endif %}
答案 3 :(得分:0)
如果您只有几页没有"元素"。
,请考虑这种更简单的方法base.html文件:
{% block some_element %}
{% include 'includes/element.html' %}
{% endblock %}
{% block content %}
{% endblock %}
pages_with_element.html:
{% extend 'base.html' %}
{% block content %}
<h1>content here</h1>
{% endblock %}
page_without_element.html:
{% extend 'base.html' %}
{% block some_element %}
{% endblock %}
{% block content %}
<h1>content here</h1>
{% endblock %}