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




    Tag:
    引用地址:

    评论

  • 我的做法是写一个inclusion_tag