2015-12-19 26 views
1

我想創建一個Web應用程序,用戶將選擇一個文件,獲取數據處理,然後重定向到帶有url參數的確認頁面(?狀態= 1)如何從處理視圖移動到確認視圖,然後顯示確認頁面?
我已經把我的代碼下面這在我的觀點和URL不工作PY文件Django的工作流程從一個視圖重定向到另一個,並顯示頁面的url參數

# views.py 
def marketdata_processing(request): 
    if request.method == 'POST': 
     uploadform = forms.MyUploadForm(request.POST, request.FILES) 
     if uploadform.is_valid(): 
      newdoc = models.UploadDocument(docfile=request.FILES['uploadfile']) 
      filename = request.FILES['uploadfile'].name 
      newdoc.save() 
      selecteddate = newdoc.getselecteddate() # Model method calculated 
      fileid = newdoc.pk 
      request.session['fileid'] = fileid 
      request.session['selecteddate'] = selecteddate 
      return redirect(reverse('views.confirm_input_details')) 
    else: 
     uploadform = forms.MyUploadForm() 
    # Render list page with the documents and the form 
    return render_to_response(
     'mytemplate.html', 
     {'uploadform': uploadform}, 
     context_instance=RequestContext(request) 
    ) 


def confirm_input_details(request): 
    fileid = request.session['fileid'] 
    selecteddate = request.session['selecteddate'] 
    msg = 'Proceed to import data for %s? \nFileID Being Imported is %s ' % (
     selecteddate, fileid,) 
    url = reverse('views.confirm_input_details', kwargs={'status': 1}) 
    return HttpResponseRedirect(url) 

# urls.py 
urlpatterns = [ 
    url(r'', views.marketdata_processing, name='myapp/mytemplate.html'), 
    url(r'^\?status=(?P<status>[0-9]+)$', 
     views.confirm_input_details, name='myapp/myconfirmpage.html'), 
] 
+0

您是否有錯誤信息?請張貼。 – Jingo

+0

好心地顯示您在運行代碼時得到的錯誤 – phourxx

+0

嗨,沒有錯誤顯示,模板只需加載而不重定向到confirm_inputs視圖。這個頁面加載的URL是「127.0.0.1/myapp?status=1。我希望調用confirm_input視圖,然後調用模板。 – Avagut

回答

1

有一對夫婦的問題,我覺得在你的代碼存在:

  • 縮進是一個非常在Python代碼中是重要的事情。請確保'marketdata_processing'視圖中if-else語句的縮進順序正確。請注意,在您的代碼中:

    return render_to_response('mytemplate.html', 
             {'uploadform': uploadform}, 
             context_instance=RequestContext(request)) 
    

    將始終執行,因爲它在else語句之外。你可能想縮進它的其他下(如果這是有道理的) - 像這樣:

    else: 
        uploadform = forms.MyUploadForm() 
        return render_to_response('mytemplate.html', 
              {'uploadform': uploadform}, 
              context_instance=RequestContext(request)) 
    
  • 而不是「重定向(反向())」嘗試「HttpResponseRedirect()」在處理視圖調用確認頁視圖,就像這樣:

    from django.http import HttpResponseRedirect 
    
    return HttpResponseRedirect('/?status=1')  --> relative URL shown 
    

    地方相對/絕對URL(包括將工作)以上。

  • 最後,使您的確認頁模板與上下文參數,像這樣的「confirm_input_details」視圖:

    def confirm_input_details(request): 
         fileid = request.session['fileid'] 
         selecteddate = request.session['selecteddate'] 
         msg = 'Proceed to import data for %s? \nFileID Being Imported is %s ' % (selecteddate, fileid) 
    
         return render_to_response('confirmpage_template.html'), 
               {'fileid': fileid, 
               'selecteddate': selecteddate, 
               'msg': msg}, context_instance=RequestContext(request)) 
    

** P.S:堅持整齊基礎,它會工作。你碰巧在同一個視圖中調用你的confirm_input_details視圖。據我所知,這可能會讓你陷入無限循環。任何視圖的簡單概念是:

take input:request, parameters 
    --> process logic with parameters 
     --> render a specific template or call another url where a template is being rendered. 

如果沒有渲染模板,則不能期望頁面顯示。

+0

非常感謝你的回答,它讓所有事情變得更加清晰。一直在使用代碼片段,我認爲是來自不同版本的Django,我重新設計了整個應用程序,代碼更簡單,更清晰,這個問題已經被整理出來。 – Avagut

相關問題