【问题标题】:Blank page through Mako template rendering in python / cherrypy在 python/cherrypy 中通过 Mako 模板渲染的空白页
【发布时间】:2014-12-25 20:22:35
【问题描述】:

看来我终于可以让Mako 工作了。 至少在控制台中完成的所有工作都有效。 现在我尝试用Mako 渲染我的index.html,我得到的只是一个空白页。 这是我调用的模块:

    def index(self):
    mytemplate = Template(
                    filename='index.html'
                )   
    return mytemplate.render()

html 是这样的:

<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<meta charset="UTF-8" />
</head>
<body>
<p>This is a test!</p>
<p>Hello, my age is ${30 - 2}.</p>
</body>
</html>

所以当我调用192.168.0.1:8081/index(这是我运行的本地服务器设置)时,它会启动该功能,但我的浏览器中的结果是一个空白页。

我对@9​​87654327@ 的理解是否正确,还是我错过了什么?

【问题讨论】:

    标签: python templates cherrypy mako


    【解决方案1】:

    在基本用法中,一切都非常简单,well documented。只需提供正确的引擎路径即可。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    
    import os
    
    import cherrypy
    from mako.lookup import TemplateLookup
    from mako.template import Template
    
    
    path   = os.path.abspath(os.path.dirname(__file__))
    config = {
      'global' : {
        'server.socket_host' : '127.0.0.1',
        'server.socket_port' : 8080,
        'server.thread_pool' : 8
      }
    }
    
    
    lookup = TemplateLookup(directories=[os.path.join(path, 'view')])
    
    
    class App:
    
      @cherrypy.expose
      def index(self):
        template = lookup.get_template('index.html')
        return template.render(foo = 'bar')
    
      @cherrypy.expose  
      def directly(self):
        template = Template(filename = os.path.join(path, 'view', 'index.html'))
        return template.render(foo = 'bar')
    
    
    
    if __name__ == '__main__':
      cherrypy.quickstart(App(), '/', config)
    

    沿着 Python 文件,创建view 目录并将以下内容放在index.html 下。

    <!DOCTYPE html>
    <html>
    <head>
      <title>Title</title>
      <meta charset="UTF-8" />
    </head>
    <body>
      <p>This is a ${foo} test!</p>
      <p>Hello, my age is ${30 - 2}.</p>
    </body>
    </html>
    

    【讨论】:

    • 这很棒。我特别不知道我的 server.py 的区别在哪里(我稍后会查找),但我会以你的作为基础,最终可以开始研究真正的东西。谢谢!
    • 您能否解释一下,您的示例中的 index 和 direct 模块有什么区别?两者似乎都做同样的事情,但我想当你简单地启动服务器时只使用“索引”模块,不是吗?
    • TemplateLookup 是文件系统查找。你告诉它模板根目录在哪里,然后让它获取一个模板,比如lookup.get_template('user/cabinet.html')。你可以自己做同样的事情,比如在directly 方法中,指定完整的模板文件名。我给了你相关文档页面的链接。努力了解您选择的模板引擎是如何工作的。
    • 好吧,我已经通读了文档。无论如何,这对于试图让它自己工作是必要的。我只是想澄清一下,在你放入两个模块之后是否有更深层次的含义,因为它们往往会做同样的事情。还是谢谢~
    • 没问题。对我来说,the section about TempalteLookup 已经足够清楚了,所以我想确保您阅读了它。关于“更深层次的含义”,当您可以手动完成所有常规操作时,您可以直接使用Template。当您将其自动化时,TemplateLookup 可以提供帮助(就像您之前关于完整 Make 解决方案的问题一样)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2012-01-11
    • 2016-05-01
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多