zoukankan      html  css  js  c++  java
  • Django之上下文处理器

    上下文处理器是用来返回一些在全局模板中都可以使用的数据,比如登入后的用户信息,在很多页面中都需要使用,那么我们可以放在上下文处理器中,就没有必要在每个视图函数中都返回这个对象了。

    步骤1:在APP内新建一个python文件(或者单独创建一个python包用来管理所有的上下文处理器)

    步骤2:在python文件中定义个函数,只有一个参数(request),函数中处理完自己的逻辑后,把需要返回的数据通过字典的形式返回,如果没有数据返回就返回一个空字典。

    步骤3:在setting中注册(TEMPLATES→OPTIONS→context_processors),格式是APP名字.文件名.函数名

    如下定义一个获取用户名的上下文:

    context_processors.py

    from front.models import User
    
    def front_user(request):
        user_id = request.session.get("user_id")
        context = {}
        if user_id:
            try:
                user = User.objects.get(pk=user_id)     
                context["front_user"] = user     
            except:
                pass
        return context

    注册:

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')]
            ,
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                    "front.context_processors.front_user"          //注册自己的上下文
                ],
            },
        },
    ]

    模板中的使用:

     {% if front_user %}
            {{ front_user.username }}
        {% else %}
            没有
        {% endif %}
  • 相关阅读:
    python functools模块
    python 垃圾回收详解
    python与鸭子类型
    简单写一下图片上传获取宽高的方法
    手写一个简单的webpack的配置
    immutable的使用
    react中实现异步请求的方法二、redux-promise-middleware
    react中实现异步请求的方法一,react-thunk
    浅谈vuex。
    Vue中插槽的使用。
  • 原文地址:https://www.cnblogs.com/yan-peng/p/10292090.html
Copyright © 2011-2022 走看看