- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有一个 ImportError 有可能让我发疯。情况是这样的:
tests/
testWebsite.py
website/
__init__.py
__main__.py
_webtools/
__init__.py
templatedefs.py
...
_templates/
base.mako
article.mako
...
代码(没有测试目录,在问题解决之前我犹豫提交)在这里在线:https://github.com/Boldewyn/website/ .
当我调用 python -m website.__main__ build
时,主例程使用 website/_templates
下的模板从一些输入静态 HTML 文件创建。这在任何给定目录中都可以正常工作。
但是,在 tests/testWebsite.py
中我有一个单元测试,它也应该运行相同的东西。但是 Mako 模板会引发文件的导入错误,而在其他情况下可以正常导入。
$ head -n 5 website/_templates/article.mako
# -*- coding: utf-8 -*-
<%!
from website._webtools.templatedefs import strip_tags
%>
<%inherit file="base.mako" />
运行测试然后产生:
$ python -m unittest tests.testWebsite
...
ERROR: test_initial_build (tests.testWebsite.BuildTestCase)
Check, if building directly after bootstrap works
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/testWebsite.py", line 99, in test_initial_build
File "website/_webtools/build.py", line 89, in build
article.save(articles=articles)
File "website/_webtools/articles.py", line 514, in save
template_engine.render_article(self, **ctx)
File "website/_webtools/templates.py", line 52, in render_article
r.render_article(article, **ctx)
File "website/_webtools/templates.py", line 277, in render_article
tpl = self.lookup.get_template(filename)
File "/usr/lib/python2.7/dist-packages/mako/lookup.py", line 217, in get_template
return self._load(srcfile, uri)
File "/usr/lib/python2.7/dist-packages/mako/lookup.py", line 277, in _load
**self.template_args)
File "/usr/lib/python2.7/dist-packages/mako/template.py", line 205, in __init__
module = self._compile_from_file(path, filename)
File "/usr/lib/python2.7/dist-packages/mako/template.py", line 249, in _compile_from_file
filename)
File "/usr/lib/python2.7/dist-packages/mako/template.py", line 470, in _compile_text
exec code in module.__dict__, module.__dict__
File "_templates_article_mako", line 16, in <module>
ImportError: No module named templatedefs
现在,有趣的是,我可以直接从模板打印 sys.path
:
<%!
import sys
print sys.path
from website._webtools.templatedefs import strip_tags
%>
我可以在那里确认,website
在路径中。此外,导入确实在所有其他部署方案中都能很好地工作。
导入 website
或 website._webtools
也能正常工作。只有 website._webtools.templatedefs
部分出错。
有没有人知道我可以在哪里寻找可能出错的迹象?
测试代码非常简单:
class BuildTestCase(unittest.TestCase):
def setUp(self):
self.tmpdir = tempfile.mkdtemp()
self.cwd = os.getcwd()
os.chdir(self.tmpdir)
bootstrap(self.tmpdir, { # this initiates a new project
"URL": "localhost",
"TITLE": "Example",
"DEFAULTS": {
"AUTHOR": "John Doe",
}
})
def test_initial_build(self):
"""Check, if building directly after bootstrap works"""
build()
def tearDown(self):
os.chdir(self.cwd)
shutil.rmtree(self.tmpdir)
编辑: 另一个诊断:我让 mako 编译模板并独立执行生成的 Python 文件。奇迹般有效。我还将 templatedefs.py 减少到最低限度(只有 defs 返回空字符串),这样我也可以排除该文件中的 ImportErrors(或其他异常)。
系统信息:Ubuntu 11.04、Python 2.7、Mako 0.3.6。
最佳答案
这确实让人抓狂。但是这里有一些事情:
./nosetests
:这有效并且所有 9 个测试都通过了
'templatedefs'
是 '_webtools.__dict__'
中唯一缺少的键,当您添加 'from website import _webtools'
到你的 mako 模板并将 'nosetests'
与 'python -m unittest tests.testWebsite'
进行比较:其他部分已经在之前导入
sys.path
在'python -m unittest tests.testWebsite'
情况下包含''
(相对路径) ,但不是在 'nosetests'
情况下,其中 sys.path
仅包含绝对路径。这导致 'website._webtools.__file__'
有不同的值:一个是相对的 ['website/_webtools']
,另一个是绝对的 ['/home/用户名/tmp/网站/_webtools']
。由于您创建了 os.chdir
,因此相对路径不再起作用。
SO:如果你想使用纯单元测试,你可以在测试文件的开头添加'import website._webtools.templatedefs'
。这确保您在运行 os.chdir
时导入了 templatedef。我建议使用 Nose 。希望对您有所帮助。
关于路径 : ImportError raised in mako template 中的 Python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6821572/
下面抛出一个语法错误,“解析时出现意外的 EOF”: ${foo({'bar':'baz'})} 我猜这是来自内部闭合花括号。 这工作正常: ${foo(dict(bar='baz'))} 但是使用字
我在查看 Mako 的文档时发现了 Mako 的 TemplateLookup 函数:Using TemplateLookup .但是,我从未在 Pyramid 的文档中看到过这一点,因为我从来不需要
在 mako 模板中输出一些 UGC( $user.text )时,我想使用 mako 过滤器 'h' 清理内容,然后添加一些 标签代替换行符,所以有一些格式。 但是,mako 似乎忽略了我应用 'h
我是 Python 和 Mako 等新手。我的问题可能看起来很愚蠢,我提前道歉,但我查看了文档但找不到它。 在.py文件中,我可以使用#字符来记笔记。我也可以使用 ''' notes notes ''
我有一个想法,将模板放入数据库中,并为设计者提供直接从 CMS 面板编辑模板的可能性。但困扰我的是安全问题。如果我们能够将 python 命令直接放入模板中,那它怎么会安全呢?如果我在 mako 模板
有没有一种简单的方法可以在 mako 中调用给定字符串名称的函数? 最佳答案 您应该能够在 globals() 返回的字典中查找它。例如: ${globals()[func_name](...)}
我有这样一个方法: def index(self): title = "test" return render("index.html", title=title) 其中 render
有没有办法将包含错误的模板字符串添加到 mako 的错误跟踪中? 最佳答案 我认为您不太可能找到这样的东西。与所有其他快速 python 模板引擎一样,Mako 通过将您的模板编译为 python 代
我正在尝试读取数据库表内容并使用 mako 和 bottle 将其显示为网页。该表中有一些 Unicode (utf-8) 字段。 UnicodeDecodeError('ascii', 'MOTOR
这是我的 Mako 代码,但当我将此代码与我的服务器 Cherrypy 一起使用时出现错误。错误是 SyntaxException: (SyntaxError) invalid syntax (, l
以下示例来自 Mako docs实际上不起作用: inner, x is ${x}, y is ${y} outer, x is ${x},
我们有这段代码并且运行良好。重构后,它不再起作用了。正如评论所说,如果请求不是 ajax 请求,我们只想从基页继承。为此,我们将一个参数传递给模板,并根据该参数决定是否继承。 查看.py class
目标:在基础模板和子模板中访问 myargs。目前我只能访问其中一个。 调用: child.render(myargs={'a':2, b:'5'}) 基本摘录: % if myargs['a']:
是否可以在渲染前获取 Mako 模板中变量的名称? from mako.template import Template bar = Template("${foo}") # something li
在从 Mako 模板自动生成代码的用例中,我希望有一个很好的语法来删除前导空格(类似于使用行尾的 \ 删除换行符)。 下面的代码 from mako.template import Template
我希望能够创建一个变量“hasBannana”,该变量仅存在于检查某些事情的 mako 模板 html 中。假设杂货和商店是从生成模板的函数传入的。 %for customer in store: h
每次我尝试在 Sublime Text 中使用这个语法荧光笔时都会弹出这个错误。我不确定我将如何修复它,谷歌似乎没有显示任何结果。是否有人恰好是 XML/TM 语法专家可以提供帮助? 错误。 加载语法
我有一个 Mako 文件(我的 Python 服务器将其转换为 HTML),其中包含带有 JavaScript ES6 模板文字的脚本元素。由于 Mako 和 JS 都识别 ${..},我被迫编写 $
以下内容适用于 Python 命令行 CELLULAR='1.2.3.4' OCTETS=CELLULAR_IP.split('.') FOURTH_OCTET=OCTETS[3] T101_IP='
我想找到一种方法来截断标题(如果太长),如下所示: 'this is a title' 'this is a very long title that ...' 有没有办法在mako中打印字符串,并在
我是一名优秀的程序员,十分优秀!