Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解决已定义类的Flask中的NameError_Python_Python 2.7_Flask - Fatal编程技术网

Python 如何解决已定义类的Flask中的NameError

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调用) #此导入调用将分页初始化为表单的

我正在Flask中进行一个项目,我们需要添加一个分页类来加载结果。我最终使用了一个预定义的方法,当我尝试加载图像索引时,遇到了一个名称错误:

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