template.render() 谷歌应用引擎 (python)

Posted

技术标签:

【中文标题】template.render() 谷歌应用引擎 (python)【英文标题】:template.render() Google App Engine (python) 【发布时间】:2011-01-11 21:12:43 【问题描述】:

为此,我正在使用 google 的 webapp 框架。我在 get 方法中使用 template.render() 为我渲染模板。

我正在使用以下代码为我执行此操作

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

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

(我在谷歌应用引擎上也找不到模板类的文档,因此我在问。)

【问题讨论】:

您确定 template_values 不是可选的吗?我没有在这个盒子上安装 appengine,但我想我记得不需要提供它。但是,您的问题确实引出了另一个问题。如果你没有传入任何模板值,你为什么要使用模板? @Mike 可能是因为我对 GAE 还很陌生。我希望(例如)url localhost:8080/foobar 为我呈现模板,我不希望用户导航到 locahost:8080/templates/foobar.html。这样,当用户发回 /foobar 时,我将处理他们的输入并相应地呈现模板。也许我找错树了? @moderators - 是否可以开始一个新线程并提出一个不相同但非常相似的问题? 如果这是一个不同的问题,它值得一个新的线程。 【参考方案1】:

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

template_values = 

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

【讨论】:

能否将 template_values 替换为 ?我知道dict() 会起作用,但我目前无法测试前一个参数。【参考方案2】:

好的,谢谢大家的回答。

我所做的是:

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))

这似乎是我能想到的最 Pythonic 的解决方案。

【讨论】:

感谢分享。干净整洁。【参考方案3】:

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

【讨论】:

我认为我没有正确解释这一点,尽管静态文件听起来确实像我想要做的。基本上我有一个包含表单的模板 foo.html。当表单发布到我想处理输入并根据这些输入重新呈现页面(foo.html)。但是当使用只是导航到表单时,我不想将任何值呈现到表单中。如果我只提供包含我所有 模板标签的静态 html 文件,我也不想复制 html 文件。 Phil,您所描述的要求您将 template.render 与一个空的 template_values 字典一起使用。 @Adam 这就是我目前正在做的事情(根据我原来的帖子)。我问有没有比这更好的解决方案。 我不相信有。 我现在所做的是将渲染代码放入它自己的方法中,该方法将模板文件名和模板值作为参数。我已将 template_values 默认为 =dict() 但这本质上是相同的解决方案。我需要回到绘图板并制定一个静态解决方案。【参考方案4】:

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

为了使这更容易,您可以修改您的帮助代码:

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))

【讨论】:

以上是关于template.render() 谷歌应用引擎 (python)的主要内容,如果未能解决你的问题,请参考以下文章

template render in javascript

如何在谷歌应用引擎和计算引擎之间建立私有连接?

非template/render模式下使用iview组件时标签需要转化

在 GAE 应用程序中加载外部模板?

vue2.X+iview2.xiView在非 template/render 模式下标签的转化

谷歌应用引擎(路径文件)