有没有一种好方法可以将 pychecker/pylint 应用于 Tornado 模板中的 python 代码?
Posted
技术标签:
【中文标题】有没有一种好方法可以将 pychecker/pylint 应用于 Tornado 模板中的 python 代码?【英文标题】:Is there a good way to apply pychecker/pylint to the python code in Tornado templates? 【发布时间】:2011-08-05 23:44:05 【问题描述】:我正在使用 Tornado 2.0 (Python 2.6.5) 构建一个简单的网络应用程序。
当然,我的 Tornado 模板包含 Python 代码的 sn-ps。对于我的非模板代码,我使用 pychecker 和 pylint 来检查错误等。
但是,显然 pychecker 和 pylint 不能直接在模板上运行,b/c 模板不是正确的 python 文件(对于非 Tornado 用户:它们是类似 html 的带有一些控制序列的 sn-ps 和嵌入的python代码)。
所以,我的问题是:谁能建议一种将 pychecker/pylint 应用于这些模板文件中的 python 代码的好方法?大概这将涉及从文件中提取代码。
我可以大胆猜测如何做到这一点,但我很好奇其他人是否认为这是一个问题,以及他们所追求的解决方案。我对 Web 应用程序设计/构建还很陌生,所以我对以实践经验为指导的答案很感兴趣。
【问题讨论】:
没有办法。我建议使用视图类。为每个模板创建一个类,将所有代码放入此类,然后将此类的实例作为模板的参数。如您所见,您迟早会遇到嵌入式 Python 代码的问题。出于调试和性能分析的原因,将所有代码保存在 .py 文件中是一种很好的做法。 感谢 Mikko 的建议。我认为你的建议绝对是要走的路。随时将您的评论“升级”为完整答案,以便我给予您更多的信任! 【参考方案1】:您需要使用视图类模式来避免模板中出现无法分析的 Python 代码。
创建一个 Python 类来处理您的视图,而不是函数
将所有“模板逻辑”代码作为类方法。您的模板将它们称为 view.get_full_name 和 def get_full_name(self):return self.item.first_name + " " + self.item.last_name
从你的类中创建实例
将 call() 作为处理的起点
将“self”作为上下文变量传递给您的模板
一些针对 Django 的说明,但通常所有 Python 框架(Pyramid、Zope)都遵循相同的模式:
Class views in Django
“$yourframeworkname view class”应该会在 Google 中产生更多教程。
【讨论】:
以上是关于有没有一种好方法可以将 pychecker/pylint 应用于 Tornado 模板中的 python 代码?的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种好方法可以最大限度地减少 Google Maps Roads API 的负载?
在 UIScrollView 中调整内容 UIView 的大小,有没有一种好方法可以做到这一点而无需进行任何计算?