我正在尝试使用Web2Py / Python创建一个评论部分,我创建了没有错误的表单,但是当表单提交时,评论没有完全添加。谁能发现我失踪的东西?
db1.py模式:
db.define_table('products',
Field('Product_Name',requires=IS_NOT_EMPTY()),
Field('Product_Description',requires=IS_NOT_EMPTY()),
Field('Product_Review',requires=IS_NOT_EMPTY()),
auth.signature)
db.define_table('product_comments',
Field('products', 'reference products'),
Field('body', 'text', requires=IS_NOT_EMPTY()),
auth.signature)
default.py controller:
def show():
post = db.products(request.args(0, cast=int))
productDescription = T("Product Description")
productReview = T("Product Review")
back = T("Back")
#commentHeading = T("Comments")
db.product_comments.products.default = post.id
db.product_comments.products.readable = False
db.product_comments.products.writable = False
comments = db(db.product_comments.products==post.id).select()
form = SQLFORM(db.product_comments).process()
return locals()
默认/ show.html视图:
{{extend 'layout.html'}}
<h1>{{=XML(post.Product_Name, sanitize=True)}}</h1>
<h2>{{=XML(productDescription, sanitize=True)}}</h2>
{{=XML(post.Product_Description, sanitize=True)}}
<h2>{{=XML(productReview, sanitize=True)}}</h2>
{{=XML(post.Product_Review, sanitize=True)}}
<h2>Comments</h2>
{{for comment in comments:}}
<div class="well">
{{=comment.created_by.first_name}} {{=comment.created_by.last_name}}
on {{=comment.created_on}} says
{{comment.body}}
</div>
{{pass}}
{{=XML(form, sanitize=True)}}
<a href="/ReviewMyProduct/default/index">{{=XML(back, sanitize=True)}}</a>
答案 0 :(得分:0)
提交表单后,您在处理表单(插入新评论)之前选择现有评论,因此新提交的评论不会包含在页面上显示的评论中。只需颠倒最后两行的顺序:
form = SQLFORM(db.product_comments).process()
comments = db(db.product_comments.products==post.id).select()
此外,您应该摆脱所有XML(..., sanitize=True)
次呼叫,因为它们完全没必要。这适用于您需要绕过模板中的默认转义但需要清理因为内容不受信任的情况。在这种情况下,您无需绕过任何内容的转义。
答案 1 :(得分:0)
我需要在=
内{{comment.body}}
使其看起来像{{=comment.body}}
。但是,如果您希望评论部分根据索引显示正文,那么Anthony的答案是习惯性的。
如果没有它,提交评论会发布之前提交的评论(总是一个评论)。