Hei*_*Pak 5 python mysql button
编辑:问题解决了!感谢用户对您的输入感到不满.这不是解决方案,而是让我沿着正确的道路走下去:我的LEFT JOIN显示了所有空帖!我还包括if-defined check,作为一个很好的备份检查.
目标:在消息发布仪表板上,如果登录用户拥有该帖子,则仅显示delete-post按钮.
什么有效:如果用户在数据库中创建了帖子,按钮将正确显示和运行.
失败的原因:如果用户在数据库中没有帖子,则仪表板会显示一个"模板"帖子,该帖子没有值且不在数据库中.在所有用户的仪表板上,可以看到与非发布用户关联的此"模板"帖子.一旦用户在数据库中创建帖子,该"模板"将消失并且删除按钮正确显示.如果我删除了用户的上一个(或仅限)帖子,则会重新显示此"模板"帖子.
我的想法:我的'if'陈述出了什么问题?因为它为每个没有任何真实帖子的用户显示此"模板"帖子,无论我登录的是谁.
这是我的代码dashboard.html,缩写.
{% for message in messages: %}
//'mu_id' is messages.user_id as defined in server.py
//'user[0]['id'] is logged-in user id
//using 'session['id'] instead produces same (unwanted) results
{% if message['mu_id'] == user[0]['id']: %}
// show delete button (this part worked, don't worry)
{% endif %}
//this displays each message with poster name
{{message['first_name']}}<br>
{{message['message']}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我的server.py,查询缩写 - 以防万一它是相关的.
//this query uses session['id'] to grab user data
query = "SELECT * FROM users WHERE id = :id LIMIT 1"
data = {
'id': session['id']
}
user = mysql.query_db(query, data)
// this query joins messages & users tables
mquery = "SELECT first_name, message, messages.id AS message_id, messages.user_id AS mu_id FROM users LEFT JOIN messages ON users.id = messages.user_id"
messages = mysql.query_db(mquery)
//Long query here to get comments, by joining messages & users table to comments table.
return render_template('dashboard.html', user=user, messages=messages, comments=comments)
Run Code Online (Sandbox Code Playgroud)
谢谢!
我认为你需要做的是在显示消息之前检查消息是否真实。
{% if messages is defined %}假设您使用的是 jinja2,您需要在之前插入此内容{% for message in messages: %}以检查消息集合不为空。
{% endif %}当然,不要忘记最后关闭 if 。