2011-07-15 39 views
6

我是Django的新手,並試圖將上載文件格式轉換爲包含標記。所以我可以在各種模板中使用它。在Django包含模板標記中處理請求

我創建了以下包含標籤:

 
#upload_files.py 

@register.inclusion_tag('upload_form.html') 
def upload_handler(context): 
    request = context['request'] 
    view_url = reverse('upload.views.upload_handler') 
    if request.method == 'POST': 
     form = UploadForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
     return HttpResponseRedirect(view_url) 

    upload_url, upload_data = prepare_upload(request, view_url) 
    form = UploadForm() 

    upload_model_list = UploadModel.objects.all().order_by('-pub_date') 

我想現在包括這一個模板,所以在頁面上我有:

 
#mypage.html 
{% extends 'base.html' %} 
{% load upload_files %} 

{% upload_handler %} 

我收到以下錯誤:

 
upload_handler takes 1 arguments 

我應該從模板傳遞什麼參數?

回答

11

您需要註冊標記時添加takes_context=True得到的Django通過上下文對象的功能:

@register.inclusion_tag('upload_form.html', takes_context=True) 

每默認context永遠是第一個參數呢!請致電inclusion tags

附註:仔細確定在哪些頁面上使用此模板標記,因爲視圖可能會以某種方式呈現附加表單/處理髮布的請求,而這些請求可能會與您的標記提供的邏輯相沖突(例如表單驗證將被觸發,如果該頁面可能被來自另一個表格的發佈請求調用)。你可以例如。如果你在頁面上有多個表單,另外檢查一下HTML元素的名字是否在request.POST

+0

我有這個問題!我在網頁上的任何地方都使用模板標籤,因爲它包含登錄表單。登錄後,我嘗試傳遞參數以修改模板標記中的某些內容(通過request.POST),但當登錄模板標籤再次重新加載時,request.method = GET !!!所以我找不到tha參數。我怎樣才能找到這個參數? – juankysmith

+0

那麼該方法將再次獲得'GET',因爲登錄視圖在表單發送後很可能會重定向,所以您無法在那裏訪問您的請求數據...... –

+0

準確地說,登錄視圖以重定向結束.. 。 – juankysmith