0

我的模板中有以下逻辑:

{% for task in tasks %}
    {% ifchanged task.shared_task_id %}
        <tr>{{ task }}</tr>
    {% endifchanged %}
{% endfor %}

但是,如果是无,我想忽略ifchanged标签。shared_task_id就像是:

{% ifchanged task.shared_task_id or if task.shared_task_id == None %}
    <tr>{{ task }}</tr>
{% endifchanged %}

有没有办法做到这一点?

4

3 回答 3

0

我现在在模型中通过一种骇人听闻的方式来做到这一点:

{% ifchanged task.shared_task_id_or_random %}

# models.py
def shared_task_id_or_random(self):
    return self.shared_task_id or str(random.random())

关于如何解决这个问题的任何更好的想法?

于 2013-07-26T21:19:20.723 回答
0

既然你不能有andor逻辑 in {% ifchange %},你总是可以使用 2 if 块来实现你想要的:

{% for task in tasks %}
    {% ifchanged task.shared_task_id %}
        <tr>{{ task }}</tr>
    {% else %}
        {% if task.shared_task_id == None %}
            <tr>{{ task }}</tr>
        {% endif %}
    {% endifchanged %}
{% endfor %}
于 2013-07-26T21:46:25.763 回答
0

试试这个(用 Hieu 的修复编辑):

{% ifchanged task.shared_task_id %}
    <tr>{{ task }}</tr>
{% else %}
    {% if not task.shared_task_id %}
        <tr>{{ task }}</tr>
    {% endif %}
{% endifchanged %}

并没有真正遵守 DRY 原则,但比你现在使用的要少得多。Django 的模板语言并不是真正的高级逻辑,所以我认为没有更好的解决方案。

如果您需要打印很多东西而不仅仅是打印{{ task }},我认为最好的方法是不要大量重复自己并减轻更新代码的痛苦,那就是使用单独的模板并使用{%include <other_template> %}.

于 2013-07-26T21:48:44.007 回答