Iter over dict并显示object.item django模板

时间:2017-01-12 10:14:49

标签: python django jinja2

我有三个联系人要显示在我的页面上,而不是写三次联系

div div div object.first /div /div /div
div div div object.second /div /div /div
div div div object.last /div /div /div

我更喜欢做

之类的事情
contacts = ['first', 'second', 'third']

在python视图中

{% for field in contacts_fiels %}
    div div div {{ object.field }} /div /div /div
{% endfor %}

有什么想法吗?

编辑:

我有类似的东西:

(view.py)

object.first = 'user1'
object.second = 'user2'
object.third = 'user3'
contacts_fields = ['first', 'second', 'third']

然后jinja循环到具有在contacts_fields中注册的字段的对象,以便

div div div user1 /div /div /div
div div div user2 /div /div /div
div div div user3 /div /div /div

2 个答案:

答案 0 :(得分:2)

您必须从视图中将名为contacts的列表作为上下文对象传递。这完成如下。

views.py

return render(request, 'views/index.html', context={"values":[1,2,3,4]})

的index.html

{% for val in values %}
<div>
    <div>
        <div>Val is {{ val }}</div>
    </div>
</div>
{% endfor %}

如需进一步阅读,请参阅official documentation

答案 1 :(得分:1)

这是一个非常简单的示例视图,它使用返回的渲染中的上下文字典参数将联系人列表发送到模板

def myView(request):

    contacts = ["A", "B", "C"]

    return render(request, "myTemplate.html", {"contacts": contacts}

现在在模板中,您可以添加类似的内容以显示contacts列表中的字符串:

{% for c in contacts %}
    <div>c</div>
{% endfor %}

现在,如果您的contacts基于django对象,则可以使用Contact.objects.all()替换您的列表(或者您正在过滤它)。所以你最终会得到类似的东西:

def myView(request):

    contacts = Contact.objects.all()

    return render(request, "myTemplate.html", {"contacts": contacts}

执行此操作后,您可以将模板中Contact对象的不同字段值显示为表格,如下所示:

<table class="table">
    <thead>
        <tr>
            <th>Field Name A</th>
            <th>Field Name B</th>
            <th>Field Name C</th>
        </tr>
    </thead>
    <tbody>
        {% for c in contacts %}
            <tr>
                <td>c.fieldA</td>
                <td>c.fieldB</td>
                <td>c.fieldD</td>
            </tr>
        {% endfor %}
    </tbody>
</table>