gpt4 book ai didi

python - Flask 线程化评论

转载 作者:行者123 更新时间:2023-12-01 02:29:46 25 4
gpt4 key购买 nike

我想在 Flask 中显示嵌套注释。我使用 MongoDb,我的文档结构是这样的:

{"_id":16,"content":"This is first answer.","discussion_id":1,
"posted":{"$date":"2017-10-26T19:19:05.174Z"}}
{"_id":17,"content":"This is second answer.","discussion_id":1,
"posted":{"$date":"2017-10-26T19:19:27.325Z"}}
{"_id":18,"content":"This is third answer.","discussion_id":1,
"posted":{"$date":"2017-10-26T19:20:00.126Z"}}
{"_id":19,"content":"This is fourth answer. This answer's parent should be second.","discussion_id":1,
"posted":{"$date":"2017-10-26T19:21:28.206Z"},"parentid":2}
{"_id":20,"content":"Fifth answer whose parent should be fourth.","discussion_id":1,
"posted":{"$date":"2017-10-26T19:22:11.393Z"},"parentid":4}

测试Python程序如下所示:

from flask import render_template
from flask import Flask
from flask_pymongo import PyMongo

app = Flask(__name__)
app.config['MONGO_DBNAME'] = 'programming'
app.config['MONGO_URI'] = 'mongodb://localhost:27017/programming'
app.config['JSON_AS_ASCII'] = False
mongo = PyMongo(app)

@app.route('/')
def index():
table = mongo.db.comments

commentList = table.find({'discussion_id' : 1})

comments = []
for comment in commentList:
comments.append({'commentnumber' : comment['_id'], 'date' : comment['posted'], 'content' : comment['content']})
result = mongo.db.comments.find_one( { '_id' : comment['_id'] , "parentid": { '$exists': True, '$ne': False } })
if (result):
comments.append({ 'parent' : comment['parentid'] })
print("Parent comment ", comment['parentid'])

return render_template('index.html', comments=comments)

if __name__ == "__main__":
app.run(debug=True)

和 jinja 模板我想递归地显示评论。

{%- for item in comments recursive %}
<li>{{ item.content }}</li>
{%- if item.children -%}
<ul class="children">{{ loop(item.children) }}</ul>
{%- endif %}</li>
{%- endfor %}

应该如何在 Jinja 中存储当前帖子的子级并递归显示嵌套评论。

最佳答案

我在 Flask 网站的论坛上为我的游戏 Infinitroid 做了类似的事情,例如https://infinitroid.com/forum/posts/12

我基本上所做的是,在服务器端,使用每个评论的父 ID 来确定整数深度或缩进级别:如果按主键排序,则后面的评论会排在后面较早的, parent 应该已经在名单上。因此,您可以为没有父级的注释设置 depth = 0,为有父级的注释设置 parent.depth + 1(使用临时字典进行查找)。

将 CSS 设置为根据标签嵌套级别缩进。然后,使用下面的算法进行显示。就我而言,我通过 javascript 显示评论(如果您好奇,您可以查看该页面上的源代码),但该算法在 Jinja 中也应该可行。

从深度 = 0 开始。对于每条评论:

  • 如果删除深度级别,请为删除的每个级别添加结束标记
  • 为此评论添加开始标记并增加深度级别
  • 显示评论正文
  • 在最后一条评论中,为任何剩余的深度级别添加结束标签

您可以将其构造为“带退出的循环”循环,以避免重复结束深度级别部分。

关于python - Flask 线程化评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46962894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com