我使用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 %}
答案 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 %}
注意:代码片段未经过实际测试......