2016-06-12 5 views
1

Ich möchte eine Abstimmungsfunktion implementieren. Die Vote-Funktion kann das Objekt nicht abrufen. vote.js sollte in Ordnung sein. Irgendeine Idee? Es scheint, dass die POST-Anfrage nicht gesendet wird. Vielen Dank.vote-function "Kein Eintrag stimmt mit der angegebenen Abfrage überein"

Dies ist der Fehler:

Page not found (404) 
Request Method: GET 
Request URL: http://.../vote/ 
Raised by: book.views.vote 
No Eintrag matches the given query. 

Schnipsel in result.html:

<a href="/vote/" id="eintrag-vote-{{ eintrag.id }}" class="vote">▲</a> 
<p id="eintrag-title-{{ eintrag.id }}">{{ eintrag.title }}</p> 

models.py:

class Eintrag(models.Model): 
    author = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    title = models.CharField(max_length=200) 
    points = models.IntegerField(default=1) 
    text = models.TextField() 

views.py:

@login_required 
def vote(request): 
    eintrag = get_object_or_404(Eintrag, id=request.POST.get('eintrag')) 
    eintrag.points += 1 
    eintrag.save() 
    return HttpResponse() 

urls.py:

url(r'^vote/$', views.vote, name='vote'), 

und vote.js:

$(document).ready(function() { 

    // using jQuery 
    function getCookie(name) { 
    var cookieValue = null; 
    if (document.cookie && document.cookie != '') { 
     var cookies = document.cookie.split(';'); 
     for (var i = 0; i < cookies.length; i++) { 
     var cookie = jQuery.trim(cookies[i]); 
     // Does this cookie string begin with the name we want? 
     if (cookie.substring(0, name.length + 1) == (name + '=')) { 
      cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
      break; 
     } 
     } 
    } 
    return cookieValue; 
    } 
    var csrftoken = getCookie('csrftoken'); 

    function.vote(eintragID) { 
    $.ajax({ 
     type: "POST", 
     url: "/vote/", 
     data: { 
     "eintrag": eintragID 
     }, 
     success: function() { 
     $("#eintrag-vote-" + eintragID).hide(); 
     $("#eintrag-title-" + eintragID).css({ 
      "margin-left": "15px" 
     }); 
     }, 
     headers: { 
     'X-CSRFToken': csrftoken 
     } 
    }); 
    return false; 
    } 

    $("a.vote").click(function() { 
    var eintragID = parseInt(this.id.split("-")[2]); 
    return vote(eintragID); 
    }) 

}); 

Antwort

0

Es scheint, dass Sie ein Anforderungsverfahren Mismatch haben. Sie tun ein GET, wenn Sie einen POST machen sollten.

Diese Linie stellt eine 404, weil es keine request.POST ist:

eintrag = get_object_or_404(Eintrag, id=request.POST.get('eintrag')) 

ich Sie einladen, mit django.views.decorators.http.require_POST diese Ansicht zu dekorieren, damit Sie eine HTTP 405 Method not allowed error bekommen, die besser die Methode Problem als ein 404

I reflektiert Ich denke, es kommt davon, wie Ihre Ajax-Anfrage in JS erledigt wird (siehe http://api.jquery.com/jquery.ajax/)

Können Sie versuchen, Folgendes zu ändern?

function vote(eintragID) { 
    $.ajax({ 
    ... 
+0

gleiche Fehler: die Putty sagt: nicht gefunden:/Stimme/ [12/Jun/2016 18.17.15] "GET/Stimme/HTTP/1.1" 404 1.722 – royaIT

+1

Nun, Sie werden immer Haben Sie ein Problem, wenn Sie eine GET-Anfrage machen, müssen Sie diese irgendwie in eine POST-Anfrage ändern. Vergessen Sie nicht, nach der Änderung Ihrer JS-Datei CollectStatic zu sammeln. – raphv

+0

'code' function.vote (eintragID) { $ Schnipsel ({ Methode: "POST", url: "/ Stimme /", Daten: { "eintrag": eintragID}, Erfolg: function() { $ ("# eintrag-vote-" + eintragID) .hide(); $ ("#eintrag-title-" + eintragID) .css ({"margin-left": "15px"}); } , Header: { 'X-CSRFToken': csrftoken } }); Rückgabe false; } 'code' – royaIT

Verwandte Themen