Python 发布数据库行时出现 NoneType 错误
Python NoneType error when posting a database row
尝试在 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>
我很确定这是由于 post 是 None,然后视图尝试访问 post.Product_Description 和 post.Product_Review,然后你得到一个 AttributeError .
可能你想改变
post = db.products(2)
至
post = db.products(request.args(0, cast=int))
这将使它与您在索引中建立的链接保持一致。
db.products(2)
returns 来自 db.products
table 的记录,其 id
为 2。如果尚未创建此类记录(出现根据您的情况),那么它将改为 return None
。在视图中,当您有 post.Product_Name
时,这相当于 None.Product_name
,这会引发您看到的 NoneType
错误。
您可能需要在 show()
控制器函数或其关联视图中使用一些逻辑来处理请求的产品 id
不存在的情况(重定向或在查看)。
此外,如 中所述,因为 "index" 页面上的链接有 URL 类似 URL('show', args=row.id)
(具有 db.products
记录 ID作为第一个 URL arg),您应该通过以下方式在 show
控制器中检索请求的记录:
post = db.products(request.args(0, cast=int))
尝试在 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>
我很确定这是由于 post 是 None,然后视图尝试访问 post.Product_Description 和 post.Product_Review,然后你得到一个 AttributeError .
可能你想改变
post = db.products(2)
至
post = db.products(request.args(0, cast=int))
这将使它与您在索引中建立的链接保持一致。
db.products(2)
returns 来自 db.products
table 的记录,其 id
为 2。如果尚未创建此类记录(出现根据您的情况),那么它将改为 return None
。在视图中,当您有 post.Product_Name
时,这相当于 None.Product_name
,这会引发您看到的 NoneType
错误。
您可能需要在 show()
控制器函数或其关联视图中使用一些逻辑来处理请求的产品 id
不存在的情况(重定向或在查看)。
此外,如 URL('show', args=row.id)
(具有 db.products
记录 ID作为第一个 URL arg),您应该通过以下方式在 show
控制器中检索请求的记录:
post = db.products(request.args(0, cast=int))