2015-11-26 50 views
0

我在基本Django視圖中創建了一個新產品,並使用AJAX篩選行業列表中的以下代碼。我想將ajax處理代碼移入一個單獨的方法,但我得到該視圖沒有返回HttpResponse對象。它返回None而不是。 任何人都可以推薦的方式來安全地分離出來嗎?我有其他觀點使用確切的邏輯。從Django幫助函數返回HttpResponse時出錯

def new_instrument(request): 
    if request.is_ajax() and request.method == 'GET': 
     if request.GET.get('typeis') =='industry': 
      print('Now loading industries') 
      sectorid = int(request.GET.get('sector_is')) 
      sector = models.SecSectorMaster.objects.filter(pk=sectorid).order_by('sectorname') 
      industries = models.SecIndustryMaster.objects.filter(sectorid=sector).order_by('industryname') 
      industry_dict = {} 
      for this_i in industries: 
       industry_dict[this_i.industryid] = this_i.industryname 
      return HttpResponse(
       json.dumps(industry_dict), 
       content_type="application/json" 
      )** 
    if request.method == 'POST': 
     mainform= forms.EditInstrumentForm(sector,industrygroup,industries,request.POST,prefix="main") 
     if mainform.is_valid(): 
      security = mainform.save() 
      selectid = security.pk   
      return redirect('instrumentsapp.views.security_list') 
     else: 
      return render(request, 'instrumentsapp/edit_instrument.html', {'mainform': mainform}) 
    else: 
     mainform = forms.EditInstrumentForm(prefix="main") 
     return render(request, 'instrumentsapp/edit_instrument.html', {'mainform': mainform}) 
+0

在什麼地方發生錯誤? – Sayse

+0

在頁面上觸發了ajax函數,這裏這個視圖被稱爲 – Avagut

+1

如果請求方法是Ajax,但typeis!='industry'會發生什麼? –

回答

1

你可以單獨視圖並直接使用JsonResponse,你應該返回響應,如果測試失敗,這可能是你的問題,因爲他們告訴你,它返回無來代替。我相信你應該寫這樣的事情

from django.http import JsonResponse 

def get_industry(request): 
    if request.is_ajax() and request.method == 'GET': 
     if request.GET.get('typeis') =='industry': 
      print('Now loading industries') 
      sectorid = int(request.GET.get('sector_is')) 
      sector = models.SecSectorMaster.objects.filter(pk=sectorid).order_by('sectorname') 
      industries = models.SecIndustryMaster.objects.filter(sectorid=sector).order_by('industryname') 
      industry_dict = {} 
      for this_i in industries: 
       industry_dict[this_i.industryid] = this_i.industryname 
      return JsonResponse(industry_dict) 
     return JsonResponse({'industry': None}) 
+0

非常感謝,讓我看看關於JsonResponse。如果我可能會問,爲什麼你使用了兩個return語句? – Avagut

+0

是的讓我知道它是如何爲你服務的。我添加了另一個返回的語句來處理if =='行業'失敗的情況,因此如果發生這種情況,您仍然可以在Ajax請求中響應並處理它在js(或從哪裏調用視圖)中的處理方式。 – Alejo

相關問題