Joh*_*ing 6 python jinja2 pyramid
我有一个用户登录时的基本模板,在该基本模板上,我需要在下拉菜单中添加特定于用户的选项.带有选项的下拉菜单必须在所有处理程序中保持不变,即,任何时候使用子模板调用(扩展)基本模板.
除了执行必要的数据库查询,将查询结果分配给变量,并将该变量传递给每个处理程序(有很多),我如何将其合并为一个查询和一个变量,直接传递给基本模板?我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
Run Code Online (Sandbox Code Playgroud)
现在,我至少可以简单地通过以下方式简单地装饰每个方法:
@view_config(...)
@get_base_data
def my_handler(request):
pass # rest of code...
Run Code Online (Sandbox Code Playgroud)
这是金字塔中最不明显的事情之一,也需要一段时间才能找到我.
您可以在BeforeRender事件中修改全局模板上下文.
或者,您可以使用基于类的视图,从一个基本视图类继承所有视图get_base_data(),然后将类实例传递给模板上下文到您的所有视图,然后您可以使用提取数据{{ view.get_base_data }}.
http://ruslanspivak.com/2012/03/02/class-based-views-in-pyramid/
我保证采用后一种方法,因为它更美观,更可预测,更易于维护工程.
| 归档时间: |
|
| 查看次数: |
1141 次 |
| 最近记录: |