更新Jinja2模板变量

2024-05-18 20:15:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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函数。问题是:一旦我点击了过滤器“sortbayalpha”,并通过js(通过ajax)调用了python函数“sortByAlpha”,那么如何在运行时更新模板变量而不调用模板.render()再次运行?这会导致整个页面的重新加载,我想避免它。 非常感谢你!在


Tags: 函数代码self模板游戏过滤器jinja2过程
1条回答
网友
1楼 · 发布于 2024-05-18 20:15:06

您的AJAX请求要么需要以JSON格式返回games对象列表,这样JavaScript就可以在浏览器中更新该列表,要么使用一个模板来呈现页面的这一部分,然后让JavaScript用从服务器加载的HTML替换掉该部分。在

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

def rendered_games_list(self, sort_by=None):
    games_query = Game.all()
    if sort_by:
        # I winged this bit, you didn't specify the ORM used
        games_query = games_query.order_by(sort_by)
    template = JINJA_ENVIRONMENT.get_template(games_list_template)        
    return template.render(gl=games_query.run())

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

^{pr2}$

在主模板中,插入呈现的游戏列表HTML,如下所示:

{{ games_list|safe }}

所以你的主模板不会呈现游戏列表本身,它只是包含它。在

AJAX处理程序可以直接返回rendered_games_list()

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

相关问题 更多 >

    热门问题