社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

公用模版 如何统一传值呀

我是好人啊 • 10 年前 • 4939 次点击  

标题写的有点模糊

因为实在不知道怎么写

问题如下:

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

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

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

@VA 3q

VA
Reply   •   2 楼
VA    10 年前

我的办法比较比较笨但我用起来目前也比较有效: 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 楼
我是好人啊    10 年前

@Hiro_Fu @涂伟忠 谢谢两位

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

可以用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    10 年前

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