如何在Django模板中比较两个查询集?

时间:2017-07-11 23:13:45

标签: python html django for-loop django-templates

这听起来可能与使用zip和其他选项比较两个查询集的其他帖子非常相似,但我一直在阅读很多,但没有一个能让我知道我能为比较我需要做些什么。

首先,我从数据库获取查询,在HTML模板中我需要为select元素生成一些默认值。有一个默认值很容易,但multiple我遇到麻烦,因为Django模板中没有break

假设我从后端返回了这两个查询集:

[<J: j1>, <J: j2>, <J: j3>, <J: j4>]
[<J: j2>, <J: j4>]

我尝试过这样的事情,我可以理解它的循环超过了需要,所以我得到的输出也超过了需要。我试着寻找会破坏循环的东西,但我认为在Django模板中没有分解循环。

<select name="" id="">
    {% for j in all_j %}
        {% for s in all_s %}
            {% if j.id == s.id %}
                <option value="{{ j.id }}" selected="selected">{{ j.name }}</option>
            {% else %}
                <option value="{{ j.id }}">{{ j.name }}</option>
            {% endif %}
        {% endfor %}
    {% endfor %}
</select>

我尝试了其他方法,例如

<select name="" id="">
    {% for s in all_s %}
        {% if s in all_j %}
            <option value="{{ j.id }}" selected="selected">{{ j.name }}</option>
        {% else %}
            <option value="{{ j.id }}">{{ j.name }}</option>
        {% endif %}
    {% endfor %}
</select>

然后我认为如果它是真的那么它只会被输出,else中的东西不会运行。

有人可以给我一个想法或知道我可以用这种情况做些什么吗?

以下是我想要实现的目标。

enter image description here

1 个答案:

答案 0 :(得分:2)

试试这个:

<强> views.py

from django.shortcuts import render


def home(request):
    context = {
        'all_s': ['j1', 'j2', 'j3', 'j4'],
        'all_j': ['j2', 'j4']
    }
    return render(request, 'index.html', context)

<强>的index.html

<html>
<header>
    <title></title>
</header>
<body>
<select name="bla" id="" multiple style="width: 200px;">
    {% for s in all_s %}
        {% if s in all_j %}
            <option value="{{ s }}" selected="selected">{{ s }}</option>
        {% else %}
            <option value="{{ s }}">{{ s }}</option>
        {% endif %}
    {% endfor %}
</select>
</body>
</html>

结果:

enter image description here