2016-11-14 2 views
0

Ich habe ein Problem damit, Ajax mit meiner Django-Ansicht zu arbeiten. Der genaue Fehler istDjango-View hat kein HttpResponse-Objekt zurückgegeben

CustomMembers.decorators.formquestioninfo keine HttpResponse Objekt hat zurückzukehren. Es gab stattdessen None zurück.

Die Ansicht wird von einem benutzerdefinierten Dekorierer wie folgt begrenzt.

def is_god_admin(f): 
    def wrap(request, *args, **kwargs): 
     # This checks to see if the user is a god admin. If they are not, they get thrown to their profile page 
     if 'userID' not in request.session.keys() and 'username' not in request.session.keys(): 
      return HttpResponseRedirect("/Members/Login") 
     else: 
      # lets check the roleID to what ID we need. 
      god_admin = Roles.objects.get(role_name='System Admin') 
      if request.session['roleID'] != god_admin.id: 
       return HttpResponseRedirect("/Members/Profile/" + request.session['userID']) 
      return f(request, *args, **kwargs) 

    wrap.__doc__ = f.__doc__ 
    wrap.__name__ = f.__name__ 
    return wrap 

Der Blick im Augenblick enthält nur eine Rückkehr der Vorlage zusammen mit einem Scheck zu zeigen, wenn Ajax eine Anfrage senden verwendet.

Ansicht

@is_god_admin 
def formquestionsinfo(request, formid, catid, mainid): 
    """ Displays the forms information.""" 
    # need the following values in both post and get methods 

    forms = Form.objects.all() 

    if request.is_ajax(): 
     print('ajax request') # this fires then errors 
    else: 
     return render(request, formquestions.html, 'forms':forms) # this works just fine with a get request 

Der Ajax-Code, der ausgeführt wird, ist: (das getCookie basiert weg von django Dokumentation - Cross Site Request Forgery protection

$(document).ready(function(){ 
       $("#{{main_id}}_main_visible").click(function(e){ 
        e.preventDefault(); 
        var url = window.location.href; 
        $.ajax({ 
         type:'get', 
         headers: {"X-CSRFToken": getCookie("csrftoken")}, 
         url: url, 
         data: { mainid: {{main_id}} }, 
         async: true, 
         cache: false 
        }); 
       }); 
      }); 

Alle Hilfe ist willkommen wirklich Dank Gewinn

..

Antwort

2

return f(request, *args, **kwargs) ruft die View-Funktion im Wrapper des Decorators auf, jedoch führt die Verzweigung für Ajax-Anfragen nur eine print aus und verlässt die Funktion ohne return Aussage, dass kehrt eine gültige Antwort Objekt:

if request.is_ajax(): 
    print('ajax request') 
    ... # return a response object here to avoid returning None 
+0

Also auch wenn ich frage Jquery/Ajax nicht die Seite neu zu laden, muss django noch eine Rückkehr tun, um die Vorlage zu machen ? – crzyone9584

+0

Jede Anfrage muss eine gültige Antwort enthalten. Keine ist keine gültige Antwort. –

+0

Danke für die Erklärung und Ihre Zeit. Es funktioniert jetzt. – crzyone9584

Verwandte Themen