没有重复按钮的循环Django模板

时间:2012-10-05 12:36:16

标签: django templates for-loop logic

当我投票支持多个条目时,for循环中的每个条目都会复制“添加投票”按钮。关于如何修复逻辑以使添加投票按钮只出现一次的任何想法?

                    {{ user.get_profile.votes.all }}

                {% for v in user.get_profile.votes.all %}
                    {% if v.entry = e.entry %}
                        <form action="/profile/" method="post">
                        {% csrf_token %}
                        <input type='hidden' name='entry_id' value='{{ e.id }}'>
                        <input type='hidden' name='project_id' value='{{ p.id }}'>
                        <input type='hidden' name='team_id' value='{{ t.id }}'>
                        <input type='submit' name="remove_vote" value='Remove Vote'>
                        </form>
                    {% elif v.entry != e.entry %}
                        <form action="/profile/" method="post">
                        {% csrf_token %}
                        <input type='hidden' name='entry_id' value='{{ e.id }}'>
                        <input type='hidden' name='project_id' value='{{ p.id }}'>
                        <input type='hidden' name='team_id' value='{{ t.id }}'>
                        <input type='submit' name="add_vote" value='Add Vote'>
                        </form>
                    {% endif %}
                    {% empty %}
                        <form action="/profile/" method="post">
                        {% csrf_token %}
                        <input type='hidden' name='entry_id' value='{{ e.id }}'>
                        <input type='hidden' name='project_id' value='{{ p.id }}'>
                        <input type='hidden' name='team_id' value='{{ t.id }}'>
                        <input type='submit' name="add_vote" value='Add Vote'>
                        </form>
                {% endfor %}

screenshot

2 个答案:

答案 0 :(得分:1)

在Django你有一个forloop计数器,你可以像这样使用它:

{% if forloop.first %}
    <input type='submit' name="add_vote" value='Add Vote'>
{% endif %}

你的按钮只会在循环的第一轮。

答案 1 :(得分:1)

稍微清理你的代码:

          <form action="/profile/" method="post">
            {% csrf_token %}
            <input type='hidden' name='entry_id' value='{{ e.id }}'>
            <input type='hidden' name='project_id' value='{{ p.id }}'>
            <input type='hidden' name='team_id' value='{{ t.id }}'>

            {% for v in user.get_profile.votes.all %}
                {% ifequal v.entry e.entry %}
                    <input type='submit' name="remove_vote" value='Remove Vote'>
                {% elif v.entry != e.entry %}
                    <input type='submit' name="add_vote" value='Add Vote'>
                {% endifequal %}
            {% endfor %}
          </form>

由于两种情况下的else动作都相同;你只需要检查一次输入。我还修改了你的模板,因为你有一个=,你需要两个进行比较。