django中級(jí) --- RequestContext

在django中默認(rèn)使用Context傳遞數(shù)據(jù),一個(gè)Context是一系列變量和值的集合,它和Python的字典有點(diǎn)相似

例:

def view_1(request):
    # ...
    t = loader.get_template('template1.html')
    c = Context({
        'app': 'My app',
        'user': request.user,
        'ip_address': request.META['REMOTE_ADDR'],
        'message': 'I am view 1.'
    })
    return t.render(c)
     
def view_2(request):
    # ...
    t = loader.get_template('template2.html')
    c = Context({
        'app': 'My app',
        'user': request.user,
        'ip_address': request.META['REMOTE_ADDR'],
        'message': 'I am the second view.'
    })
return t.render(c)

view_1和view_2中每個(gè)視圖給模板傳了3個(gè)相同的變量:app、user、ip_address,這增加了代碼的冗余,此時(shí)使用RequestContext
方法一:

def custom_proc(request):
    "A context processor that provides 'app', 'user' and 'ip_address'."
    return {
        'app': 'My app',
        'user': request.user,
        'ip_address': request.META['REMOTE_ADDR']
    }

def view_1(request):
    # ...
    t = loader.get_template('template1.html')
    c = RequestContext(request, {'message': 'I am view 1.'},
        processors=[custom_proc])
    return t.render(c)
     
def view_2(request):
    # ...
    t = loader.get_template('template2.html')
    c = RequestContext(request, {'message': 'I am the second view.'},
        processors=[custom_proc])
    return t.render(c)

方法二:
setting.py中TEMPLATES_CONTEXT_PROCESSORS項(xiàng),django1.8在TEMPLATES中

 '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',
                'myproject.context_processors',
            ],
        },
vim context_processors.py
def name_proc(request):
    user_id = request.user.id
    ......

    info_dic = {
        'session_user_id': user_id,
        ......
    }
    return info_dic

模板中即可直接調(diào)用:{{ session_user_id }}
RequestContext依次調(diào)用這些processors,往當(dāng)前context中放入這里定義的默認(rèn)變量。可自定義一個(gè)processors然后添加到這里。注意:使用RequestContext時(shí),應(yīng)作為第三個(gè)參數(shù)傳入

  • django.core.context_processors.auth
    如果 TEMPLATE_CONTEXT_PROCESSORS 包含了這個(gè)處理器,那么每個(gè) RequestContext 將包含這些變量:
  1. user :一個(gè) django.contrib.auth.models.User 實(shí)例,描述了當(dāng)前登錄用戶(或者一個(gè) AnonymousUser 實(shí)例,如果客戶端沒(méi)有登錄)。
  2. messages :一個(gè)當(dāng)前登錄用戶的消息列表(字符串)。 在后臺(tái),對(duì)每一個(gè)請(qǐng)求,這個(gè)變量都調(diào)用 request.user.get_and_delete_messages() 方法。 這個(gè)方法收集用戶的消息然后把它們從數(shù)據(jù)庫(kù)中刪除。
  3. perms : django.core.context_processors.PermWrapper 的一個(gè)實(shí)例,包含了當(dāng)前登錄用戶有哪些權(quán)限。
  • django.core.context_processors.i18n
    如果這個(gè)處理器啟用,每個(gè) RequestContext 將包含下面的變量.
  1. LANGUAGES : LANGUAGES 選項(xiàng)的值
  2. LANGUAGE_CODE :如果 request.LANGUAGE_CODE 存在,就等于它;否則,等同于 LANGUAGE_CODE 設(shè)置
  • django.core.context_processors.request
    如果啟用這個(gè)處理器,每個(gè) RequestContext 將包含變量 request , 也就是當(dāng)前的 HttpRequest 對(duì)象。 注意這個(gè)處理器默認(rèn)是不啟用的,你需要激活它
    如果你發(fā)現(xiàn)你的模板需要訪問(wèn)當(dāng)前的HttpRequest你就需要使用它:
    {{ request.REMOTE_ADDR }}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容