template.render()Google App Engine(python)

template.render()Google App Engine(python)

问题描述:

我正在使用来自谷歌的webapp框架。我在get方法中使用template.render()为我呈现模板。template.render()Google App Engine(python)

我用下面的代码为我

path = os.path.join(os.path.dirname(__file__), file_name) 
self.response.out.write(template.render(path, template_values)) 

其中file_name是模板渲染和template_values这样做是含有任何值的字典()来呈现。如果我没有任何想要渲染的值,该怎么办?我只是传入一个空的dict()对象?这对我来说似乎不是一个很好的解决方案。我应该用template.load()代替吗?

(我找不到对谷歌应用程序引擎模板类在文档要么,所以我问。)

+1

您确定template_values不是可选的吗?我没有在这个盒子上安装appengine,但我想我记得不需要提供它。 但是,你的问题不要求别的问题。如果你没有传入任何模板值,为什么你要使用模板? – 2010-02-01 20:01:51

+0

@Mike可能因为我对GAE很新颖。 我想(为insance)url http:// localhost:8080/foobar为我呈现模板,我不希望用户导航到http:// locahost:8080/templates/foobar.html。这样当用户回发到/ foobar时,我将处理他们的输入并相应地呈现模板。 也许我在吠叫错误的树? – Phil 2010-02-01 20:05:44

+0

@moderators - 可以开始一个新线程并提出一个不一样但非常相似的问题吗? – Phil 2010-02-01 20:54:02

好的,感谢所有的答案。

我所做的是:

def render_template(template_name, template_values=dict()): 
    path = os.path.join(os.path.dirname(__file__), template_name) 
    self.response.out.write(template.render(path, template_values)) 

这似乎是最Python的解决方案,我能想出。

+0

感谢您分享。很好,很干净。 – Bill 2013-07-17 21:27:59

因为你是渲染Django模板,你需要使用渲染,和你可能无法提供空字典,因为它会抱怨无法找到它期望的变量,除非将每个变量引用括在{%if%}块中。您应该提供一个字典,其中包含模板所需的所有键,但以空字符串作为值。

+0

我不认为我正确地解释这一点,虽然静态文件听起来像我想做的事情。 基本上我有一个包含表单的模板foo.html。当表单发布到我想要处理输入并基于这些输入重新呈现页面(foo.html)时。但是,当使用只是导航到窗体,我不想渲染任何值的形式。如果我只是提供静态HTML文件,它包含我所有的{{}}模板标签,我不想也不需要复制html文件。 – Phil 2010-02-01 20:11:47

+0

菲尔,你所描述的要求你使用模板。使用空的template_values字典进行渲染。 – 2010-02-01 20:16:45

+0

@Adam这是我目前正在做的(按照我原来的帖子)。我问有没有比这更好的解决方案。 – Phil 2010-02-01 20:19:56

你可以传递一个空字典给它,它不介意。你只需要发送一些东西。你的模板不会显示任何东西。

template_values = {} 

path = os.path.join(os.path.dirname(__file__), file_name) 
self.response.out.write(template.render(path, template_values)) 
+0

你可以使用'{}'替换template_values吗?我知道'dict()'可以工作,但我无法测试目前的前一个参数。 – jmlane 2012-03-01 18:12:15

如果您没有要传入的模板变量,只需传递一个空字典即可。如果您在模板中使用任何变量,则它们都将评估为无。

为了使这个简单,你可以修改你的助手代码:

def render_template(template_name, template_values = None): 
    if template_values is None: 
    template_values = {} 
    path = os.path.join(os.path.dirname(__file__), template_name) 
    self.response.out.write(template.render(path, template_values))