Python 如何解决已定义类的Flask中的NameError
我正在Flask中进行一个项目,我们需要添加一个分页类来加载结果。我最终使用了一个预定义的方法,当我尝试加载图像索引时,遇到了一个名称错误:Python 如何解决已定义类的Flask中的NameError,python,python-2.7,flask,Python,Python 2.7,Flask,我正在Flask中进行一个项目,我们需要添加一个分页类来加载结果。我最终使用了一个预定义的方法,当我尝试加载图像索引时,遇到了一个名称错误: NameError: global name 'Pagination' is not defined 我知道这一定是我忽略的一些简单的东西,比如我在哪里声明分页对象,但是如果有人对这是什么有任何见解,我将不胜感激。不熟悉Python也有其缺点 下面是core.py中路由调用的代码(包括第6行失败的NameError调用) #此导入调用将分页初始化为表单的
NameError: global name 'Pagination' is not defined
我知道这一定是我忽略的一些简单的东西,比如我在哪里声明分页对象,但是如果有人对这是什么有任何见解,我将不胜感激。不熟悉Python也有其缺点
下面是core.py中路由调用的代码(包括第6行失败的NameError调用)
#此导入调用将分页初始化为表单的一部分。还有其他的电话
#不相关
从克里姆林宫导入应用程序、数据库、数据库模型、表单、imgutils、上传的图片
#图像页面的路由调用
@app.route('/images',默认值={'page':1})
@app.route(“/images/page/”)
def条目索引(第页):
“”“显示图像缩略图的索引”“”
posts=dbmodel.Post.query.all()
pagination=分页(第20页,帖子)#这就是错误发生的地方
返回呈现模板('board.html',form=forms.NewPostForm(),
职位=职位,分页=分页)
以及扩展forms.py的分页对象
class Pagination(object):
def __init__(self, page, per_page, total_count):
self.page = page
self.per_page = per_page
self.total_count = total_count
@property
def pages(self):
return int(ceil(self.total_count / float(self.per_page)))
@property
def has_prev(self):
return self.page > 1
@property
def has_next(self):
return self.page < self.pages
def iter_pages(self, left_edge=2, left_current=2, right_current=5, right_edge=2):
last = 0;
for num in xrange(1, self.pages + 1):
if num <= left_edge or \
(num > self.page - left_current - 1 and \
num < self.page + right_current) or \
num > self.pages - right_edge:
if last + 1 != num:
yield None
yield num
last = num
类分页(对象):
定义初始(自我、页面、每页、总计数):
self.page=page
self.per_page=每_页
self.total\u count=总计数
@财产
def页面(自我):
返回int(cell(self.total\u count/float(self.per\u page)))
@财产
def具有上一个(自身):
返回self.page>1
@财产
def具有下一个(自身):
返回self.pageself.pages-右边缘:
如果最后一次+1!=号码:
一无所获
产量数
last=num
我在这里收集了完整的源代码:名称错误意味着当前名称空间中不存在您正在使用的名称。它在forms.py中定义。因此,您要么需要使用限定名称,要么将该名称导入命名空间 正如Sean所暗示的,要使用限定名,以下代码:
pagination = Pagination(page, 20, posts)
应该是这样的:
pagination = forms.Pagination(page, 20, posts)
或者,要使该行按原样工作,应将名称导入当前命名空间,如下所示:
from kremlin import app, db, dbmodel, forms, imgutils, uploaded_images
from kremlin.forms import Pagination
看下一行-为什么需要使用前缀
forms
(forms.NewPostForm
)访问NewPostForm
),而不需要以相同的方式访问Pagination
?;-)在正在加载的模板上,一个新表单正在初始化,这里我们需要传回一个分页对象。我不确定我是否遵循了你所指出的,但是基于原始的来源,我们不需要在模板上初始化一个全新的分页对象,只要是事先创建的。Cameron-是的,你没有理解Sean的意思。我不知道你是否看过我的答案,但这是一种更为冗长的表达肖恩想告诉你什么的方式。@JohnHazen我看过了,约翰。我在Python中忽略了对象是如何初始化的。谢谢你们两位的帮助。
from kremlin import app, db, dbmodel, forms, imgutils, uploaded_images
from kremlin.forms import Pagination