++++见底部的解决方案(第二次更新)++++
我是谷歌应用引擎和Python的新手。在
我有许多jinja2模板(它们是通过编程生成的)被存储为blob(因为GAE不允许程序写入文件)。我现在想呈现这些blob模板,但不知道如何在render语句中引用它们。在
如果需要,我可以将这些模板存储在blobstore中。在
如有任何建议,将不胜感激。这样一个呈现语句的示例将是超级的。在
(我将Django包含在标记中,因为我怀疑引用Django的模板可能与此类似。)
谢谢你的帮助。在
在++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++修改了问题后续尝试使用变量作为jinja2的模板源++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 我试图让它与TextProperty字段一起工作,并做了一个简单的测试(假设我已经检索到文本字段),如下所示:
FileTxt = '<html><body><br /><br /><p>The first test value starts here {{val1}}. And {{val2}} is the 2nd test value.</p></body></html>'
val1 = 'H value 1 H'
val2 = 'H second value H'
self.render_template(FileTxt, {'val1': val1, 'val2': val2})
这将返回“无效文件名”错误。在
我注意到它试图打开文件…\templates\。。。在
我想我必须以某种方式修改以下内容。在
^{pr2}$我该如何修改它,使其在变量中而不是在文件中使用模板?或者我还需要做些什么才能使无文件版本工作?在
谢谢。在
在++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++以下是有效的!谢谢你们两个!++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++在
class TextFileRender(BaseHandler):
def get(self):
val1 = 'H value 1 H'
val2 = 'H second value H'
env = jinja2.Environment(loader=jinja2.FunctionLoader(loader))
self.render_template(env.get_template('y'), {'val1': val1, 'val2': val2})
然后我在一个单独的.py文件中添加了加载程序(不知道为什么我总是要在一个单独的文件中调用函数,然后添加到import中)
def loader(x):
r = '<html><body><br /><br /><p>The first test value starts here {{val1}}. And {{val2}} is the 2nd test value.</p></body></html>'
return r
上面的方法是有效的。但现在我的问题是,一个变量中的html内容扩展了另一个html模板(也存储在数据存储中)。我可以在html({%extends)主控形状中生成extends语句吗_模板.html“%})某种程度上像{%扩展nv.get_模板('master_template')%}?在
再次感谢你的帮助。在
是的,你可以。但是您也可以在数据存储中存储HTML模板和其他信息。我使用内容=数据库文本属性()以存储此HTML。在
关于模板继承的问题。答案是:当你实现一个函数加载器时,它将被调用两次。首先是子模板,然后是基模板。 为此,你必须更换装载机。现在它加载一个固定的HTML字符串。参数x包含模板的名称。明白了吗? 顺便说一句:当您使用jinja includes时,函数加载器也将被调用
您可以将模板数据存储在任一位置(blobstore、datastore),并且解决方案是相同的。普通的jinja2装载器是一个
FileSystemLoader
。您应该尝试类似于FunctionLoader,并从获取的blobstore(或数据存储)项返回值。在例如:
当然,您应该使用某种缓存(local,memcache),而不是每次从blobstore中获取数据。在
相关问题 更多 >
编程相关推荐