<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    原文地址:http://jjz.javaeye.com/blog/282805
    默認情況下,模板是不能訪問request的。要在模板里使用request,其實很簡單。
    首先,在視圖里,我們不能再使用默認的Context(django.template.Context),而是要使用它的子類RequestContext (django.template.RequestContext),這個類很好很強大,一會你就知道了!
    RequestContext的第一個參數是HttpRequest對象,在視圖中我們直接使用request就行。
    把以前的Python代碼
    c = Context(request, dict)  
    改成Python代碼
    c = RequestContext(request, dict)  
    dict是你想傳遞給模板的字典。
    如果以前使用的是人見人愛的render_to_response
    Python代碼
    return render_to_response('template.html', {...})  
    改成
    Python代碼
    return render_to_response('template.html', {...}, context_instance=RequestContext(request))  
    也就是增加一個context_instance參數。

    光這樣還不行。在配置文件(一般是setting.py)中,找到TEMPLATE_CONTEXT_PROCESSORS,當然,你也可能找不到,因為默認生成的setting.py中沒出現這個變量。無論如何,確保它的值是

    Python代碼
    TEMPLATE_CONTEXT_PROCESSORS = (   
        "django.core.context_processors.auth",   
        "django.core.context_processors.debug",    
        "django.core.context_processors.i18n",   
        "django.core.context_processors.media",   
        "django.core.context_processors.request"  
    )  
     差不多了,到驗證的時候了。在模板中加入一句{{ request }},是不是看到什么輸出了。使用{{ requset.session}}就可以訪問session了。
    為什么說RequestContext很強大呢,下面接著說TEMPLATE_CONTEXT_PROCESSORS是一個元組,里面的每一個字符串其實代表了一個可調用(callable)對象,比如一個函數或可調用類。除了可調用外,它們滿足下面兩個條件: 
       1.只有一個request對象作為參數
       2.而且要返回一個字典

    你可以自定義context_processor,只要它滿足上面的條件就行。
    RequestContext會把context_processor返回的字典并入自己,也就相當于在context中添加了新的內容,而這這些內容可以直接在模板中訪問。

    默認情況下TEMPLATE_CONTEXT_PROCESSORS的值是
    Python代碼
    (
        "django.core.context_processors.auth",    
        "django.core.context_processors.debug",    
        "django.core.context_processors.i18n",    
        "django.core.context_processors.media"
    )  
    所有的processor順序執行,如果兩個不同的processor返回的字典中有相同的key,后面的會覆蓋前面的。

    除了在TEMPLATE_CONTEXT_PROCESSORS中添加processor外,你還可以提供RequestContext額外的參數作為processor,例如
    Python代碼
      c = RequestContext(request, {...}, my_processor_1, my_processor_2...)  
    這種方式更靈活,不過也更麻煩。

    好了,下面看看默認的processor都干了些什么

    1.django.core.context_processors.auth
       它給context添加了三個變量(其實也就是說它返回的字典中有三個key)
       user :如果用戶登錄了,這就是一個auth.User的實例,代表當前用戶。如果用戶沒有登錄,這就是AnonymousUser的實例,代表當前的匿名用戶。
       messages: 傳給當前用戶的信息列表。
       perms: django.core.context_processors.PermWrapper的實例,表示當前用戶的授權。

    2.django.core.context_processors.debug
    這個家伙很懶,就算你把它放到了TEMPLATE_CONTEXT_PROCESSORS里,它也不愿意干活,你還要做點額外的工作才行。首先要確保在配置文件中DEBUG變量的值為True,然后,設置 INTERNAL_IPS,保證你的ip( 在request.META['REMOTE_ADDR']里可以看到 )在里面。
    Python代碼
    INTERNAL_IPS = ('127,0.0.1', ) #這是一個元組,每個ip都是字符串表示,本機設成127.0.0.1  都是字符串表示,做完這些,這家伙才開始工作。它給context添加了兩個變量
       debug :True,這樣我們可以在模板中使用{% if debug %}調試{% endif %}進行模板調試
       sql_queries: 表示本次請求所執行的sql的字典列表,列表中的每個字典表示一次sql查詢,字典的格式是:{'sql':..., 'time':...},sql表示執行的sql語句,time表示執行這條語句所用的時間。這個功能實在太棒了,能查看生成的sql語句,心里踏實啊!

    3.django.core.context_processors.i18n這個processor比較簡單,它也是添加兩個變量(或者說key?)
       LANGUAGES :配置文件中的 LANGUAGES
       LANGUAGE_CODE :如果reqeust中有 LANGUAGE_CODE,這個值等于request. LANGUAGE_CODE,否則這個值是配置文件中的 LANGUAGE_CODE。 
      如果不使用這個,想在頁面獲取這兩個值可以使用:
      {% get_current_language as LANGUAGE_CODE %}
      {{LANGUAGE_CODE}}
      {% get_available_languages as LANGUAGES %}|
      {{LANGUAGES}}

    4.django.core.context_processors.media
       media processor是在Django1.0中才出現的,它使context包含MEDIA_URL,context[' MEDIA_URL '] = 配置文件中的MEDIA_URL。

    5.django.core.context_processors.request
       添加一個變量request,表示當前請求的HttpRequest對象。

    最重要的是可以自定義processor,如果很多模板頁面都需要某個數據,自帶的processor又無法滿足,那就自己寫一個出來,不就是一個函數嘛,簡單!

    posted on 2008-12-04 12:58 周銳 閱讀(813) 評論(0)  編輯  收藏 所屬分類: Python
    主站蜘蛛池模板: 色影音免费色资源| 国产亚洲玖玖玖在线观看 | 国产VA免费精品高清在线| 精品久久久久久久久亚洲偷窥女厕| 亚洲精品国产啊女成拍色拍| 亚洲精品在线不卡| 亚洲偷自拍另类图片二区| 中文字幕乱码亚洲精品一区 | 国产亚洲自拍一区| 亚洲国产精品无码久久一区二区| 亚洲AV无码久久| 亚洲欧洲精品一区二区三区| 亚洲国产日产无码精品| 亚洲AV无码国产一区二区三区| 黄色三级三级免费看| 国产无遮挡色视频免费观看性色| 日韩电影免费观看| 可以免费看黄视频的网站| 国产黄色片在线免费观看| 亚洲一区爱区精品无码| 久久精品国产亚洲av麻豆色欲| 亚洲风情亚Aⅴ在线发布| 一区二区免费电影| 99久久久国产精品免费无卡顿| 日本免费电影一区| 久久精品国产亚洲夜色AV网站| 亚洲一区二区三区免费观看| 一级毛片**免费看试看20分钟| 99国产精品免费视频观看| 国产大片91精品免费看3| 亚洲精品色午夜无码专区日韩| 亚洲成人激情小说| 免费高清国产视频| 免费大片在线观看网站| 亚洲国产成人资源在线软件| 一级毛片在线完整免费观看| 成人无码区免费A片视频WWW| 久久久亚洲精品无码| 国产偷国产偷亚洲高清在线| 精品国产无限资源免费观看| 亚洲国产精品特色大片观看完整版 |