2012-05-24 35 views
0

我正在研究基於Web的Django應用程序。我的應用程序充滿了小部件(不是Django小部件),它用於使用Ajax加載不同類型的數據。例如,一個'學生'名稱小部件正在加載用戶列表,而'教師'名稱小部件正在加載學校中所有教師的列表。爲了做到這一點,我得到了一些疑惑:如何在Django的模板標籤中傳遞請求?

  • 我正在使用templatetag(看看代碼http://codepad.org/2Ug9Ct3n)。在這段代碼中,當我在做if request and request.is_ajax():時,它向我顯示了一個錯誤None object has no attribute ajax。問題是,我無法正確地包含請求。我已經修改了我的setting.py

    TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth', 
    'django.core.context_processors.static', 
    'django.core.context_processors.request', 
    'django.core.context_processors.media', 
    ) 
    

  • 如果事情沒有解決,然後纔有可能對我來說,寫在views.py整個模板標籤的一部分?如何?
  • 而不是如果有任何可能性,請張貼他們作爲答案!

    任何幫助將很可觀

    +0

    這需要在視圖中去,而不是作爲一個模板標籤。 –

    +3

    請不要問[你未解決的問題](http://stackoverflow.com/questions/10731672/getting-the-request-is-none-in-template-tags-in-django),只是豐富了問題通過更多的細節(例如解釋'None對象沒有屬性ajax'出現) – okm

    +0

    @okm我已經刪除了這個問題......並將更詳細地解釋這個部分 –

    回答

    0

    確保您的視圖(你還沒有發佈)在渲染一個RequestContext的模板。如果您使用基於類的視圖或render快捷方式,則會自動爲您執行此操作。

    但是,如果使用your're render_to_response,你需要做到以下幾點:

    from django.template import RequestContext 
    from django.shortcuts import render_to_response 
    def some_view(request): 
        # ... 
        return render_to_response('my_template.html', 
               my_data_dictionary, 
               context_instance=RequestContext(request)) 
    
    +0

    感謝您的回覆,我將代碼粘貼在模板標籤中寫入的鍵盤[link](http://codepad.org/2Ug9Ct3n)上。沒有爲這些方法編寫的views.py。它應該是?因爲我已經在模板標籤中定義的** ajax_print_widget **方法中執行了** render_to_response **。這是錯的嗎? –

    +2

    模板標籤包含在模板中。該模板由視圖呈現。該視圖必須使用'RequestContext'。 – Alasdair

    +0

    這是[我的widget_area.html](http://codepad.org/kUaMeBas)。請看第24行** {%render_widget widget_settings%} **。這裏的render_widget是模板標籤,併爲其呈現一個已定義的方法(就像你在上面發佈的代碼中看到的那樣)。我將在小部件中顯示的內容是通過** render_widget和ajax_print_widget **方法的組合來實現的。正如你看到的,我正在對ajax_print..method執行render_to_response。現在你說要渲染這個template.html也包含這些模板標籤。我通過定義一個方法來做到這一點..繼續在下一個評論 –