Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更新Jinja2模板变量_Python_Google App Engine_Templates_Variables_Jinja2 - Fatal编程技术网

Python 更新Jinja2模板变量

Python 更新Jinja2模板变量,python,google-app-engine,templates,variables,jinja2,Python,Google App Engine,Templates,Variables,Jinja2,我将appengine与Python和jinja2模板一起使用 在这个过程中我遇到了一个问题:我用这个代码呈现了一个游戏列表 self.templateValues = {} self.templateValues['title'] = 'GalaStore' self.templateValues['values'] = kw gamesQuery = Game.all() values = {'games' : gamesQuery.run()} self.templateValues['g

我将appengine与Python和jinja2模板一起使用

在这个过程中我遇到了一个问题:我用这个代码呈现了一个游戏列表

self.templateValues = {}
self.templateValues['title'] = 'GalaStore'
self.templateValues['values'] = kw
gamesQuery = Game.all()
values = {'games' : gamesQuery.run()}
self.templateValues['gl'] = values
template = JINJA_ENVIRONMENT.get_template(template)        
self.response.out.write(template.render(self.templateValues))
然后我的html中有一些按钮过滤器,每个人都调用不同的js函数。问题是:一旦我点击过滤器“sort by alpha”并通过js(通过ajax)调用python函数“SortBy alpha”,我如何在运行时更新模板变量而不再次调用template.render()函数?这将导致重新加载整个页面,我希望避免这种情况。
多谢各位

您的AJAX请求可能需要以JSON格式返回
游戏
对象列表,以便JavaScript可以在浏览器中更新列表,或者您需要一个模板来呈现页面的这一部分,并让JavaScript用从服务器加载的HTML替换该部分

后者可以重复使用;让主视图和AJAX处理程序使用相同的模板,只呈现游戏列表(不包括整个页面):

然后在主视图中使用此部分:

template_values = {
    'title': 'GalaStore',
    'values': kw,
    'games_list': self.rendered_games_list()
}
template = JINJA_ENVIRONMENT.get_template(template)        
self.response.out.write(template.render(self.templateValues))
并在主模板中插入渲染的游戏列表HTML,如下所示:

{{ games_list|safe }}
因此,您的主模板不会呈现游戏列表本身,它只包含它

AJAX处理程序可以直接返回
渲染的\u games\u list()

sort_order = self.request.get('sort_order', None)
self.response.out.write(self.rendered_games_list(sort_order))

您的AJAX请求需要以JSON格式返回
游戏
对象列表,以便JavaScript可以在浏览器中更新列表,或者您需要一个模板来呈现页面的这一部分,并让JavaScript用从服务器加载的HTML替换该部分

后者可以重复使用;让主视图和AJAX处理程序使用相同的模板,只呈现游戏列表(不包括整个页面):

然后在主视图中使用此部分:

template_values = {
    'title': 'GalaStore',
    'values': kw,
    'games_list': self.rendered_games_list()
}
template = JINJA_ENVIRONMENT.get_template(template)        
self.response.out.write(template.render(self.templateValues))
并在主模板中插入渲染的游戏列表HTML,如下所示:

{{ games_list|safe }}
因此,您的主模板不会呈现游戏列表本身,它只包含它

AJAX处理程序可以直接返回
渲染的\u games\u list()

sort_order = self.request.get('sort_order', None)
self.response.out.write(self.rendered_games_list(sort_order))

谢谢但我有一个疑问:使用template.render页面将在下一次延迟。。。还是我误会了?@user2961930:您将只呈现页面的这一部分。就是这个主意。它似乎不起作用。。。。。。它不会呈现模板的这一部分,它只是在响应选项卡(在google chrome分析页面中)上打印它)@user2961930:您确实需要在客户端编写javascript代码,以便将HTML块插入页面;jQuery有一个可能会有所帮助的方法。从我的立场看,这在你的情况下为什么不起作用是不可能的。也许你需要发布一个关于这个问题的新问题?完成了,非常感谢:)如果你想帮我解决另一个问题,简单一点谢谢!!但我有一个疑问:使用template.render页面将在下一次延迟。。。还是我误会了?@user2961930:您将只呈现页面的这一部分。就是这个主意。它似乎不起作用。。。。。。它不会呈现模板的这一部分,它只是在响应选项卡(在google chrome分析页面中)上打印它)@user2961930:您确实需要在客户端编写javascript代码,以便将HTML块插入页面;jQuery有一个可能会有所帮助的方法。从我的立场看,这在你的情况下为什么不起作用是不可能的。也许你需要发布一个关于这个问题的新问题?完成了,非常感谢:)如果你愿意,你可以帮我解决另一个问题,简单一点的xD