Jinja2条件在迭代时不能正常工作

时间:2016-12-05 22:44:38

标签: python google-app-engine jinja2

我使用Python,Google App Engine和Jinja2创建了一个博客。我有一个实体,谁拥有谁喜欢一个帖子,不包括帖子作者。我正在遍历所有喜欢帖子的用户并进行比较,以便创建帖子的用户不喜欢自己的帖子。我也有一个不同的按钮,只有当有人喜欢帖子时才会出现。我喜欢和不喜欢的帖子;如果用户喜欢帖子而且出现了不同的按钮,问题是类似的按钮不会消失,它会出现在不同的按钮旁边,这会导致用户多次喜欢同一个帖子并显示与按钮不同的按钮因为用户点击了类似按钮。变量username是当前登录的用户

{% for like in likes %} 
    {% if post.username != username and like.username != username %}
    <li>
        <form method="POST" id="likeForm">
            <input type="hidden" name="likePost" value="{{post.key().id()}}">
            <button type="submit" class="btn btn-outline-success btn-sm" form="likeForm">Like</button>
        </form>   
    </li>
    {% endif %}   
    {% if post.username != username and like.username == username %}
    <li>
        <form method="POST" id="unlikeForm">
            <input type="hidden" name="unlikePost" value="{{like.key().id()}}">
            <button type="submit" class="btn btn-outline-danger btn-sm" form="unlikeForm">Unlike</button>
        </form>   
    </li>
    {% endif %}
{% endfor %}

1 个答案:

答案 0 :(得分:2)

您错误地解释了代码的行为。显示button.setOnClickListener(this); ... @Override public void onClick(View v) { switch(v.getId()) { case R.id.YOURBUTTONID: adLoaded(); break; } 按钮的条件是:

Like

这意味着,除了 {% if post.username != username and like.username != username %} 以外的用户生成的Like列表中的每个like都会显示likes按钮username喜欢帖子的事实。可能不是你追求的。在username上进行迭代时,您不应该显示Like,如果在遍历所有likes之后,您只应显示一次likes {1}}。

对于多个username按钮 - 我怀疑当Unlike按钮为like按钮时,您不会在帖子上username检查已存在的Like按下,从而在like列表中允许多个此类likes个实例 - 每个实例都会显示Unlike按钮。

我只是在python中执行逻辑(比在jinja2中更容易,也可能更快):

if post.username != username:
    post.liked = False
    for like in likes:
        if like.username == username:
            post.liked = True
            break

和jinja2:

{% if post.username != username %}
    {% if post.liked %}
        <li>
            <form method="POST" id="unlikeForm">
                <input type="hidden" name="unlikePost" value="{{like.key().id()}}">
                <button type="submit" class="btn btn-outline-danger btn-sm" form="unlikeForm">Unlike</button>
            </form>   
        </li>
    {% else %}
        <li>
            <form method="POST" id="likeForm">
                <input type="hidden" name="likePost" value="{{post.key().id()}}">
                <button type="submit" class="btn btn-outline-success btn-sm" form="likeForm">Like</button>
            </form>   
        </li>
    {% endif %}
{% endif %}

注意:代码片段未经过实际测试......