使用Mako with Pyramid会导致错误

时间:2011-02-20 20:32:27

标签: python pylons mako pyramid

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

mako.directories = TestProject:templates 

在:

[app:TestProject]

然后在templates子目录中创建一个名为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

2 个答案:

答案 0 :(得分:9)

总结:

修改文件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


注意: MyProject myproject 是您的项目名称。尊重这个案子。

请记住在production.ini文件中执行相同的配置!

编辑:我在功能部分的1.3a1版金字塔(2011-12-09)更改日志中看到:

  

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

答案 1 :(得分:3)

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

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

相关问题