在视图中使用模块

时间:2012-03-13 06:02:20

标签: web2py web2py-modules

如何在视图中使用模块? 例如,我正在尝试使用markdown模块,因此我将其导入到我的控制器中:

from gluon.contrib.markdown.markdown2 import markdown

我使用response.render

return response.render('default/main.html', locals())

但是当我尝试在视图中访问它时,

{{=markdown(post.message)}}

我收到错误消息,说明它没有定义:

<type 'exceptions.NameError'> name 'markdown' is not defined

如何将模块传递给视图?是否有替代locals()功能来完成它?

在旁注中,我可以从我的观看中访问dbsession,这是因为它们是在models中导入的吗?

Web2Py Version 1.99.7 (2012-03-04 22:12:08) stable

更新:在我的模型db.py中导入它似乎可以解决它。有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

仅供记录。

使用locals()

并不是一个好主意

而不是将locals传递给response.render,最好创建一个字典,其中包含您希望可用于呈现视图的键。

您还可以在该词典中包含对降价的引用

from gluon.contrib.markdown.markdown2 import markdown
mydict = dict(markdown=markdown, anotherkey=anothervalue)
return response.render("path/to/view", mydict)

不要尝试将locals()扩展到mydict,如果尝试这样做,你会遇到问题。

您也可以使用默认的web2py行为

from gluon.contrib.markdown.markdown2 import markdown
response.view = "path/to/view"
return dict(markdown=markdown, anotherkey=anothervalue)

另一个选择是在模型文件中导入降价。