我想尝试在web2py
之外编写一些胶子派生的组件(web2py
html助手)。这样我就可以在命令行上测试组件,并生成简单的html文件,我可以在将它们与完整的web2py
应用程序堆栈集成之前进行分析。这加快了我的开发周期,因为我可以专注于微调组件的HTML而不必担心任何其他问题(重新部署,数据库......)。快速简便:使用gluon.html
帮助程序准备一个web2py组件,查看生成的HTML是否正常,然后在web2py
内使用它。
测试大部分都是成功的。我只是:
from gluon.html import A, TABLE, DIV, SPAN, THEAD, TR, TH, TBODY, URL, H1
def T(txt):
return txt
def my_simple_component(title):
return H1(T(title))
def test():
print my_simple_component('Hello')
产生预期的输出:
$ python test_web2py_components.py
<h1>Hello</h1>
(在我的测试中我并不关心T
。而对于我想要使用的任何测试URL
,我只是传递一个虚假的应用程序/控制器/函数。)
我发现的唯一问题是我需要有web2py
的符号链接才能使gluon.html
导入正常工作,即使胶子在PYTHONPATH上也是如此。
ln -s /install_dir/web2py/gluon/ .
有没有办法在没有额外链接的情况下导入胶子组件?
考虑到在测试阶段我的组件在web2py应用程序树之外。
这是我得到的错误:
Traceback (most recent call last):
File "lib_test1.py", line 4, in <module>
from gluon.html import A, TABLE, DIV, SPAN, THEAD, TR, TH, TBODY, URL
File "/install_dir/web2py/gluon/__init__.py", line 15, in <module>
from globals import current
File "/install_dir/web2py/gluon/globals.py", line 24, in <module>
from serializers import json, custom_json
File "/install_dir/web2py/gluon/serializers.py", line 11, in <module>
from languages import lazyT
File "/install_dir/web2py/gluon/languages.py", line 264, in <module>
PLURAL_RULES = read_possible_plurals()
File "/install_dir/web2py/gluon/languages.py", line 250, in read_possible_plurals
for pname in os.listdir(pdir):
OSError: [Errno 2] No such file or directory: '/current_dir/gluon/contrib/rules'
(不要考虑install_dir
和current_dir
:这个问题已经引入了这些问题)
答案 0 :(得分:2)
您不必进行链接。
如果你想让导入找到“gluon”,那么应该在PYTHONPATH的文件夹是它的父文件夹:sys.path.insert(0,'/ install_dir / web2py')。
这样做,(这里的zip包含gluon文件夹):
>>> import sys
>>> sys.path.insert(0, 'C:\web2py\library.zip')
>>> from gluon.html import H1
>>> print H1("Hello")
<h1>Hello</h1>