我有两个模块。一是网站的核心基础网页.py(我们把它命名为code.py
),另一个是一个附加模块(addon.py
)。使用网页.py,对于网站服务器的每个页面,核心中应该有类定义,如下所示:
class Page:
def GET(self):
variable = "Hello!"
return render.page_template(variable) #Here, it returns the rendered template to user
def POST(self):
post_variables = web.input()
pass #Doing something with those variables, maybe, writing in a database...
现在我真的需要将类定义从code.py
移到addon.py
。我可以将类定义称为addon.Page
,而不是简单的Page
。Page.GET
函数仍然运行良好。。。但是POST有一个问题。似乎在每次调用POST函数时,核心模块中的web.input()
都被设置为存储所有变量的存储对象。如果我的类定义存储在addon中,那么核心只需调用addon.Page.POST()
(我认为没有办法改变这种行为)。POST()
尝试获取web.input()
。。。当然失败了-web
没有导入到addon.py
,即使导入了,也不会有任何值web.py
web服务器正在获取-只是空字典,它只是模块的另一个实例。所以我不知道…
一种解决方案是:在addon.Page.POST()
中放入某种函数。这个函数将向下一级,到code.py
并在那里执行web.input(
,然后将它返回给addon.py
,某种访问父模块名称空间的方法(如执行import __main__
和访问__main__.web.input()
(我知道,这是不鼓励的))。
或者,例如,在模块之间放置某种类似C的指针,例如:
*在code.py
中有一个定义,所有对code.addon.web_input()
的调用都被路由到它代码.web.input()
*在addon.py
-只需调用addon.web_input
即可从code.web.input()
获取信息
在这种情况下我该怎么办?将有多个加载项,每个加载项都存储了类定义,我应该能够添加新模块,轻松连接和断开现有模块,而无需修改code.py
。我相信这在Python中是可能的。。。也许web.py
源代码需要修改?你知道吗
我想我会把我的评论变成一个答案,因为它似乎解决了你的问题。你知道吗
导入的模块缓存在Python中。这意味着当您导入
web
(主网页.py模块)从多个其他模块中,它们都将获得相同的模块对象,具有相同的内容。你知道吗所以,可能您需要做的就是
import web
在addon.py
模块的顶部。你知道吗相关问题 更多 >
编程相关推荐