Py学习  »  问与答

公用模版 如何统一传值呀

我是好人啊 • 9 年前 • 4300 次点击  

标题写的有点模糊

因为实在不知道怎么写

问题如下:

在页面头部,会显示用户 有几条未读的消息, 当用户切换到首页,或者 文章页,任何页面,这个头部都一直不变,会显示用户的未读消息,

目前采用的是,在每个视图都输出 这个 变量, 每个视图都去数据库查询 有几个未读消息,然后输出到模版, 有没有办法统一管理,不需要每个视图都输出这几个变量呀

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/917
 
4300 次点击  
文章 [ 5 ]  |  最新文章 9 年前
我是好人啊
Reply   •   1 楼
我是好人啊    9 年前

@VA 3q

VA
Reply   •   2 楼
VA    9 年前

我的办法比较比较笨但我用起来目前也比较有效: 1.在公用的base.html里把需要统一传值的坑挖好 2.在views.py里面写一个针对base.html的class based view,如BaseView,把需要统一传值的context在这个BaseView里面render给base.html,其他页面的view类都从这个BaseView继承,在他们自己的get_context_data函数里先调context = super(BaseView, self).get_context_data(**kwargs)把父类的context先获取了,再添加自己单独的内容。

大家有什么建议请不吝赐教。:D

我是好人啊
Reply   •   3 楼
我是好人啊    9 年前

@Hiro_Fu @涂伟忠 谢谢两位

涂伟忠
Reply   •   4 楼
涂伟忠    9 年前

可以用content processor来做 try: from django.contrib.sites.models import get_current_site except ImportError: from django.contrib.sites.shortcuts import get_current_site

from django.conf import settings

def site(request):
    '''
    Usage: 
    -----------------------------
    settings.py
    =======
    TEMPLATE_CONTEXT_PROCESSORS = (
        ...
        "bsp.context_processors.site",
        ....
     )

    templates
    =======
    {{ site_name }}
    {{ site.name }}
    '''
    site = get_current_site(request)
    site_name = site.name
    protocol = 'https' if request.is_secure() else 'http'
    domain = site.domain
    return {
        'site_name': site_name,
        'protocol': protocol,
        'domain': domain, 
        'site': site,

        'settings': settings,
    }
Hiro_Fu
Reply   •   5 楼
Hiro_Fu    9 年前

你的 base.html 里面写就可以 了啊。