【问题标题】:Using Mako with Pyramid causes an error将 Mako 与 Pyramid 一起使用会导致错误
【发布时间】:2011-06-30 21:31:30
【问题描述】:

当尝试将 Mako 与 Pyramid 框架一起使用时,进入 development.ini 文件并添加行

mako.directories = TestProject:templates 

在:

[app:TestProject]

然后在模板子目录中创建一个名为 template.mako 的简单 html 文件,我得到一个:

ImportError: No module named TestProject

但我不明白为什么在上述步骤之后会发生这种情况。为什么这些步骤会产生 importError?

更多错误细节:

URL: http://localhost:6543/
File 'C:\\env\\lib\\site-packages\\weberror-0.10.3-py2.7.egg\\weberror\\evalexception.py', line 431 in respond
app_iter = self.application(environ, detect_start_response)
File 'C:\\env\\lib\\site-packages\\pyramid-1.0-py2.7.egg\\pyramid\\router.py', line 158 in __call__
response = view_callable(context, request)
File 'C:\\env\\lib\\site-packages\\pyramid-1.0-py2.7.egg\\pyramid\\config.py', line 2839 in _rendered_view
context)
File 'C:\\env\\lib\\site-packages\\pyramid-1.0-py2.7.egg\\pyramid\\renderers.py', line 294 in render_view
request=request)
File 'C:\\env\\lib\\site-packages\\pyramid-1.0-py2.7.egg\\pyramid\\renderers.py', line 322 in render_to_response
result = self.render(value, system_values, request=request)
File 'C:\\env\\lib\\site-packages\\pyramid-1.0-py2.7.egg\\pyramid\\renderers.py', line 298 in render
renderer = self.renderer
File 'C:\\env\\lib\\site-packages\\pyramid-1.0-py2.7.egg\\pyramid\\decorator.py', line 17 in __get__
val = self.wrapped(inst)
File 'C:\\env\\lib\\site-packages\\pyramid-1.0-py2.7.egg\\pyramid\\renderers.py', line 280 in renderer
return factory(self)
File 'C:\\env\\lib\\site-packages\\pyramid-1.0-py2.7.egg\\pyramid\\mako_templating.py', line 77 in renderer_factory
directories = [ abspath_from_asset_spec(d) for d in directories ]
File 'C:\\env\\lib\\site-packages\\pyramid-1.0-py2.7.egg\\pyramid\\asset.py', line 207 in abspath_from_asset_spec
return pkg_resources.resource_filename(pname, filename)
File 'C:\\env\\lib\\site-packages\\setuptools-0.6c12dev_r88124-py2.7.egg\\pkg_resources.py', line 881 in resource_filename
File 'C:\\env\\lib\\site-packages\\setuptools-0.6c12dev_r88124-py2.7.egg\\pkg_resources.py', line 201 in get_provider
ImportError: No module named TestProject

【问题讨论】:

    标签: python pylons mako pyramid


    【解决方案1】:

    这是因为 mako.templates 规范的格式是 package:directory。因此,在您的情况下,您必须有一个名为“TestProject”的包。

    您的项目可能有一个包,但它显然不称为“TestProject”。

    【讨论】:

    • 啊,是的,谢谢,在我的情况下,包名叫做 testproject 而不是 TestProject。
    【解决方案2】:

    总结:

    编辑文件development.ini并在[app:MyProject]部分添加:

    mako.directories = myproject:templates

    现在我们可以打开文件/MyProject/myproject/__init__.py 并添加如下一行:

    config.add_route('foo', '/foo', view='myproject.views.foo', view_renderer='foo.mako')

    这将呈现位于以下位置的模板: /MyProject/myproject/templates/foo.mako


    注意:MyProjectmyproject 是您的项目的名称。尊重案件。

    记得在production.ini文件中做同样的配置!

    编辑:我在 1.3a1 版本的金字塔 (2011-12-09) Changelog 中的 Features 部分看到:

    使用 Mako 模板不再需要 mako.directories 设置 理由:可以使用绝对值指定 Mako 模板渲染器 资产规格可以用这样的方式编写整个应用程序 资产规格,不需要有序的查找路径。

    【讨论】:

    • 似乎对于金字塔 1.3,mako.directories = myproject:templates 设置在[app:main] 之下,而不是[app:MyProject]
    猜你喜欢
    • 2013-11-11
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2015-02-23
    相关资源
    最近更新 更多