我在 Django 中覆盖了 admintemplate 的 index.html。我想在侧边栏上添加一个额外的字段,该字段仅在条件为真时才显示。
这是m index.html的重要部分:
{% block sidebar %}
<div id="content-related">
{% if action_needed %}
<div class="my-module">
<h2>Foobar</h2>
<p>Display this over the sidebar</p>
</div>
{% endif %}
... Sidebarstuff...
{% endblock %}
这是我的模板标签:
@register.simple_tag
def action_needed():
if some_conditon:
return True
else:
return False
问题是,我的模块一直显示。在另一个线程中,我读到了有关使用过滤器而不是模板标签的信息,但 Django 文档说,过滤器至少需要一个参数。但我只是想要一个真/假的回报。
最好的方法是什么?
编辑:这里有更多代码向您展示我到底在做什么:我有一个模型帐户,如果帐户过期,它有一个 DateTimeField expire_date 来存储。
exp = Account.objects.filter(expiration_date__lte = timezone.now())
if len(exp) == 0:
return False
else:
return True
Edit2:我解决了,但我不知道这是否是一种非常优雅的方式。由于我没有足够的声誉来回答我自己的问题,我需要在这里分享我的解决方案:
如果我的模块在模板标签中,我将 HTML 代码放入并返回它,如果条件为真:
@register.simple_tag
def action_needed():
if some_conditon:
return '<div class="my-module"><h2>Foobar</h2><p>Display this over the sidebar</p></div>'
else:
return ''
现在在模板中我只是调用
{% action_needed %}