【发布时间】:2013-10-24 22:42:52
【问题描述】:
我有一个用户登录时的基本模板,在该基本模板上,我需要在下拉菜单中添加用户特定选项。这个带有选项的下拉菜单必须在所有处理程序中保持不变,即,任何时候使用子模板调用(扩展)基本模板。
除了执行必要的数据库查询,将查询结果分配给一个变量,并将该变量传递给每个处理程序(有很多)之外,我如何将其合并为一个查询和一个变量,直接传递给基础模板?我也在使用jinja2 模板。
我不愿意做如此繁琐的事情来换取更简单和可维护的东西。
有什么想法吗?谢谢。
编辑
所以我仍然没有找到任何正是我正在寻找的东西;但是,我决定至少在此期间取得一些进展。因此,我制作了一个自定义装饰器,它接受视图返回的 dict() 并将适当的数据附加到它。例如:
def get_base_data(func):
def wrapper(request):
d = func(request)
user_id = request.user.id # used in query
contact_group_data = ContactGroups.query.filter(...criteria...).all()
d['contact_group_data'] = contact_group_data
return d
return wrapper
现在,我至少可以非常简洁地装饰每个方法:
@view_config(...)
@get_base_data
def my_handler(request):
pass # rest of code...
【问题讨论】: