【发布时间】:2013-11-28 17:14:19
【问题描述】:
我正在覆盖 Django 中管理模板的 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
编辑2: 我解决了它,但我不知道这是否是一种非常优雅的方式。由于我没有足够的声誉来回答我自己的问题,我需要在这里分享我的解决方案:
如果条件为真,我将如果 my-module 的 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 %}
【问题讨论】:
-
什么是
some_condition?它取决于什么? -
它不依赖任何东西。只需检查我的数据库中是否有模型的对象
-
如果您创建了过滤器,则可以将数据库中正在检查的模型的名称作为参数传递
标签: python django django-templates django-admin