2014-06-27 110 views
0

這是我的views.py文件。我正在生成XML文件的方式,我從MySQL獲得的數據。第一次它的工作,但我做出一些改變的話,我不記得是什麼我現在不是工作沒有...視圖app.views.model沒有返回HttpResponse對象

在views.py

def MessageHeaderModel2(request): 
    if request.method == "POST": 
      form = MessageHeaderForm(request.POST) 
        if form.is_valid(): 
          DDEX_Party_Id = request.POST.get('DDEX_Party_Id',None) 
          data = serializers.serialize("xml", MessageHeaderModel2.objects.all()) 
          with open("file.xml", "w") as out: 
          xml_serializer.serialize(MessageHeaderModel2.obj ects.all(), stream=out) 

現在我剛開的錯誤是

>Exception Type:ValueError 
Exception Value:The view app.views.MessageHeaderModel2 didn't return an HttpResponse object. 

回答

1

你其實沒有返回一個對象HttpResponse

Django的觀點必須因此在您的視圖的最後返回的HttpResponse一個實例:

from django.http import HttpResponse 

def view(request): 
    ... 
    return HttpResponse("the page content") 

您也可以返回可能的HttpResponse其他子類,見documentation的列表。

您也可以使用一些快捷功能使用Django的模板系統,以呈現頁面,再documentation是有幫助的在這裏,但簡要地說:

from django.shortcuts import render_to_response 

def view(request): 
    ... 
    return render_to_response('my_template.html', 
           my_data_dictionary, 
           context_instance=RequestContext(request)) 

使用您的代碼從上面的一個完整的例子:

def view(request): 
    if request.method == "POST": 
     form = MessageHeaderForm(request.POST) 
     if form.is_valid(): 
      DDEX_Party_Id = request.POST.get('DDEX_Party_Id',None) 
      data = serializers.serialize("xml", MessageHeaderModel2.objects.all()) 
      with open("file.xml", "w") as out: 
       out.write(data) 
      return HttpResponse(data) 
     else: 
      # return error response? 
    return HttpResponseNotAllowed(['POST']) 
+0

我給了返回HttpResponse(「file.xml」)..然後也不工作相同的錯誤 –

+0

您必須返回所有代碼路徑上的'HttpResponse'。我猜你只是在request.method ==「POST」'時才返回它?如果頁面設計爲僅接受POST請求,則可以在if塊後面返回HttpResponseNotAllowed(['POST'])'。 –

+0

好的。那麼xml文件生成後應該怎麼樣? –

2

就像在錯誤中聲明的一樣,您的視圖不會向客戶端發送任何響應。

添加在你看來這行的末尾:

return render(request, 'template.html') 

或其他任何迴應,你需要

+0

我應該給return render(request,'file.xml')..? –

0

所以這就是爲什麼你有這樣一個錯誤不必返回什麼...

您也可以例如返回成功值或重定向到其他視圖..

相關問題