django中級 --- RequestContext

在django中默認使用Context傳遞數(shù)據(jù)阶捆,一個Context是一系列變量和值的集合负懦,它和Python的字典有點相似

例:

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中每個視圖給模板傳了3個相同的變量:app、user褂痰、ip_address冲九,這增加了代碼的冗余器罐,此時使用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項,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

模板中即可直接調用:{{ session_user_id }}
RequestContext依次調用這些processors抵窒,往當前context中放入這里定義的默認變量弛针。可自定義一個processors然后添加到這里李皇。注意:使用RequestContext時削茁,應作為第三個參數(shù)傳入

  • django.core.context_processors.auth
    如果 TEMPLATE_CONTEXT_PROCESSORS 包含了這個處理器宙枷,那么每個 RequestContext 將包含這些變量:
  1. user :一個 django.contrib.auth.models.User 實例,描述了當前登錄用戶(或者一個 AnonymousUser 實例茧跋,如果客戶端沒有登錄)慰丛。
  2. messages :一個當前登錄用戶的消息列表(字符串)。 在后臺瘾杭,對每一個請求诅病,這個變量都調用 request.user.get_and_delete_messages() 方法。 這個方法收集用戶的消息然后把它們從數(shù)據(jù)庫中刪除粥烁。
  3. perms : django.core.context_processors.PermWrapper 的一個實例贤笆,包含了當前登錄用戶有哪些權限。
  • django.core.context_processors.i18n
    如果這個處理器啟用讨阻,每個 RequestContext 將包含下面的變量.
  1. LANGUAGES : LANGUAGES 選項的值
  2. LANGUAGE_CODE :如果 request.LANGUAGE_CODE 存在芥永,就等于它;否則钝吮,等同于 LANGUAGE_CODE 設置
  • django.core.context_processors.request
    如果啟用這個處理器埋涧,每個 RequestContext 將包含變量 request , 也就是當前的 HttpRequest 對象奇瘦。 注意這個處理器默認是不啟用的飞袋,你需要激活它
    如果你發(fā)現(xiàn)你的模板需要訪問當前的HttpRequest你就需要使用它:
    {{ request.REMOTE_ADDR }}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市链患,隨后出現(xiàn)的幾起案子巧鸭,更是在濱河造成了極大的恐慌,老刑警劉巖麻捻,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纲仍,死亡現(xiàn)場離奇詭異,居然都是意外死亡贸毕,警方通過查閱死者的電腦和手機郑叠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來明棍,“玉大人乡革,你說我怎么就攤上這事√福” “怎么了沸版?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長兴蒸。 經(jīng)常有香客問我视粮,道長,這世上最難降的妖魔是什么橙凳? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任蕾殴,我火速辦了婚禮笑撞,結果婚禮上,老公的妹妹穿的比我還像新娘钓觉。我一直安慰自己茴肥,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布荡灾。 她就那樣靜靜地躺著炉爆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卧晓。 梳的紋絲不亂的頭發(fā)上芬首,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音逼裆,去河邊找鬼郁稍。 笑死,一個胖子當著我的面吹牛胜宇,可吹牛的內(nèi)容都是我干的耀怜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼桐愉,長吁一口氣:“原來是場噩夢啊……” “哼财破!你這毒婦竟也來了?” 一聲冷哼從身側響起从诲,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤左痢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后系洛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俊性,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年描扯,在試婚紗的時候發(fā)現(xiàn)自己被綠了定页。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绽诚,死狀恐怖典徊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恩够,我是刑警寧澤卒落,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站玫鸟,受9級特大地震影響导绷,放射性物質發(fā)生泄漏。R本人自食惡果不足惜屎飘,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一妥曲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钦购,春花似錦檐盟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唱凯,卻和暖如春羡忘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磕昼。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工卷雕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人票从。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓漫雕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親峰鄙。 傳聞我的和親對象是個殘疾皇子浸间,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容