如何使用Django循环标记

时间:2016-03-21 18:15:01

标签: python django django-templates django-views django-template-filters

希望这是一个非常简单的问题。我的endgoal是能够在表中查看我的数据库条目,我可以通过列标题对其进行排序。我已阅读documentation周期代码,但不知道它们是'row1''row2'的意思:

{% for o in some_list %}
    <tr class="{% cycle 'row1' 'row2' %}">
        ...
    </tr>
{% endfor %}

其次,我如何在模板中正确实现它?我使用的是非常简单的JS library,它允许排序:

page.html中

{% if Variable %}
    <table class="sortable">
        <tr>
            <th>Title 1</th>
            <th>Title 2</th>
            <th>Title 3</th>
            <th>Title 4</th>
            <th>Title 5</th>
        </tr>
    {% for stuff in Variable %}

        <tr class="{% cycle 'stuff' %}">    
            <td>
                <a href="{% url 'detail_page' stuff.id %}">
                {{ stuff.Name|capfirst }}</a>
            </td>
        </tr>
    {% endfor %}
    </table>
{% else %}
    <p>No Results Found</p>
{% endif %}

my models.py以防万一你需要它:

def view(request):
    Variable = database.objects.all()
    context = {
        'Variable': Variable,
    }
    return render(request, 'app/page.html', context)

编辑:似乎我一直都有正确的代码,只是一些不均匀应用的CSS让我的桌子不像桌子。不需要循环标记,只需要for循环。添加另一个表行后,它看起来也更好:

{% for stuff in Variable %}
<tr>
    <td>{{ stuff.Name|capfirst }}</td>
    <td>{{ stuff.Number|capfirst }}</td>
</tr>
{% endfor %}

1 个答案:

答案 0 :(得分:7)

对于循环标记,这两个参数将交替添加到模板中,例如,模板{% for o in some_list %}<tr class="{% cycle 'row1' 'row2' %}"></tr>{% endfor %}中的代码将生成:

<tr class="row1">
    ...
</tr>
<tr class="row2">
    ...
</tr>
<tr class="row1">
    ...
</tr>
<tr class="row2">
    ...
</tr>
<!-- ... and so on while there are elements in some_list -->

等等。通常你会附加一些css,例如:

<style>
   .row1 {
      background: #345678;
   }
   .row2 {
      background: #123456;
   }
</style>

例如,这将为备用行提供不同的背景颜色。