Django之上下文處理器

上下文處理器是用來返回一些在全局模板中均可以使用的數據,好比登入後的用戶信息,在不少頁面中都須要使用,那麼咱們能夠放在上下文處理器中,就沒有必要在每一個視圖函數中都返回這個對象了。python

步驟1:在APP內新建一個python文件(或者單首創建一個python包用來管理全部的上下文處理器)django

步驟2:在python文件中定義個函數,只有一個參數(request),函數中處理完本身的邏輯後,把須要返回的數據經過字典的形式返回,若是沒有數據返回就返回一個空字典。session

步驟3:在setting中註冊(TEMPLATES→OPTIONS→context_processors),格式是APP名字.文件名.函數名函數

以下定義一個獲取用戶名的上下文:spa

context_processors.pydebug

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

註冊:code

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 %}
相關文章
相關標籤/搜索