2007-08-23
[Django]Template Context Processors - [Python]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://johnsonqu.blogbus.com/logs/7874974.html
在做BIPlatform的框架的时候,需要根据所有的Models来动态生产Menus,在base template里面就需要从template context抽取数据进行处理。目前还是每个request都要生成的,所以就需要对于所有的template context都添加menus数据,这样就需要订制自己的Context Processor,具体的文档可以参照Django关于template的说明和Simon的相关文章。
需要注意的是,我的django0.96版本的django.core.context_processors里面没有media这个Process。
Processor的代码如下,很简单,Menu生成需要的app label可以配置在setting那里。
_menu_apps = ['base']
def menus(request):
menus = []
if hasattr(request, 'session'):
menus = request.session.get('menus')
if (not menus) or (len(menus) == 0):
menus = []
for app_item in _menu_apps:
app_models = models.get_models(models.get_app(app_item))
for model in app_models:
menu_item = {
'app_label': model._meta.app_label,
'model_name': model._meta.module_name.lower(),
'model_disname': ' '.join(map((lambda x: x.capitalize()),
model._meta.verbose_name.lower().split(' ')))
}
menus.append(menu_item)
request.session['menus'] = menus
return { 'menus': menus}
settings.py需要添加以下代码:
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
#"django.core.context_processors.media",
"biplatform.context.processors.menus"
)
收藏到:Del.icio.us








评论