尝试在Web2Py上创建页面时,我收到NoneType属性错误。我正在尝试加载“show”页面,我的Product_Name属性出现NoneType错误。
这是我创建的数据库:
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()))
这是我的控制器:
def index():
form = SQLFORM(db.products).process()
rows = db(db.products).select()
return locals()
def show():
post = db.products(2)
return locals()
这是我试图运行的页面(显示):
{{extend 'layout.html'}}
<h2>{{=post.Product_Name}}</h2>
<p>Hellooooo
{{=post.Product_Description}}
{{=post.Product_Review}}
</p>
以下是与我的展示页面相关的页面:
{{extend 'layout.html'}}
<table class="table">
{{for row in rows:}}
<tr>
<td><a href="{{=URL('show',args=row.id)}}">{{=row.Product_Name}}</a></td>
</tr>
{{pass}}
</table>
答案 0 :(得分:2)
我很确定这是由post is None引起的,然后视图尝试访问post.Product_Description和post.Product_Review,然后你得到一个AttributeError。
可能你想改变
post = db.products(2)
到
post = db.products(request.args(0, cast=int))
这将使您与索引中的链接保持一致。
答案 1 :(得分:0)
index.js
返回db.products(2)
表中db.products
为2的记录。如果尚未创建此类记录(这似乎是您的情况),那么它将返回id
。在视图中,当您有None
时,相当于post.Product_Name
,这会引发您看到的None.Product_name
错误。
您可能希望在NoneType
控制器函数或其关联视图中使用某些逻辑来处理所请求的产品show()
不存在的情况(重定向或在视图中显示特殊消息)
此外,正如this answer中所述,因为“索引”页面上的链接包含id
等网址(URL('show', args=row.id)
记录ID作为第一个网址arg),您应该通过以下方式检索db.products
控制器中的请求记录:
show