输入不是从 Web2Py / Python 表单提交的
Input not being submitted from a Web2Py / Python form
我正在尝试使用 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 控制器:
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()
default/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>
提交表单时,您在处理表单(插入新评论)之前选择现有评论,因此新提交的评论不会包含在页面上显示的评论。只需将最后两行的顺序颠倒即可:
form = SQLFORM(db.product_comments).process()
comments = db(db.product_comments.products==post.id).select()
此外,您应该删除所有 XML(..., sanitize=True)
调用,因为它们完全没有必要。这是因为当您需要绕过模板中的默认转义但由于内容不受信任而需要进行清理时。在这种情况下,您不需要绕过任何内容的转义。
我需要在 {{comment.body}}
中添加一个 =
以使其看起来像 {{=comment.body}}
。但是,如果您希望评论部分根据索引显示正文,Anthony 的回答是习惯性的。
没有它,提交评论会 post 之前提交的评论(总是落后一个)。
我正在尝试使用 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 控制器:
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()
default/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>
提交表单时,您在处理表单(插入新评论)之前选择现有评论,因此新提交的评论不会包含在页面上显示的评论。只需将最后两行的顺序颠倒即可:
form = SQLFORM(db.product_comments).process()
comments = db(db.product_comments.products==post.id).select()
此外,您应该删除所有 XML(..., sanitize=True)
调用,因为它们完全没有必要。这是因为当您需要绕过模板中的默认转义但由于内容不受信任而需要进行清理时。在这种情况下,您不需要绕过任何内容的转义。
我需要在 {{comment.body}}
中添加一个 =
以使其看起来像 {{=comment.body}}
。但是,如果您希望评论部分根据索引显示正文,Anthony 的回答是习惯性的。
没有它,提交评论会 post 之前提交的评论(总是落后一个)。