2016-04-13 42 views
0

Javascript formundan veri almak açısından Django ile sorun yaşıyorum. İşte benim JavaScript kodu ...GET Form verisinden erişme - Javascript Formu Django'da

function save() { 
    var form = document.createElement("form"); 
    console.log(form); 
    form.setAttribute('method', 'get'); 
    form.setAttribute('action', '/quiz_score/'); 
    document.body.appendChild(form); 
    var i = document.createElement("input"); 
    i.setAttribute('name', 'Score'); 
    i.setAttribute('value', ""+score); 
    form.appendChild(i); 
    var i = document.createElement("input"); 
    i.setAttribute('name', 'csrfmiddlewaretoken'); 
    i.setAttribute('value', '{{ csrf_token }}'); 
    form.appendChild(i); 
    form.submit(); 
} 

ben GET kullanarak ancak POST çalışma alamadım ideal değildir biliyorum, sadece hedef sayfaya yönlendirme olmaz olduğunu. Ben sadece Python kullanabilirsiniz böylece skor değişkeni almaya çalışıyorum

class QuizScoreView(TemplateView): 
template_name = "quiz_score.html" 


def quiz_score(self, request): 
    # Quiz.objects.create(username= ,score=) 
    print("Score: "+request.body) 

İşte ... benim Django Sınıf ve işlevidir.

Lütfen daha fazla ayrıntıya ihtiyacınız varsa yorum yapın ve bunları aşağıdaki soruya ekleyeceğim.

+0

Burada sorduğunuz şey net değil. 'Quiz_score' yöntemi nedir? Ne diyor? –

cevap

1

Aşağıdaki HTML kullanarak çalışmak got it/JavaScript:

<html><body> 
<button onclick="save();">click me</button> 
<script> 
function save() { 
    var form = document.createElement("form"); 
    console.log(form); 
    form.setAttribute('method', 'get'); 
    form.setAttribute('action', '/quiz_score/'); 
    document.body.appendChild(form); 
    var i = document.createElement("input"); 
    i.setAttribute('name', 'Score'); 
    i.setAttribute('value', "+score"); 
    form.appendChild(i); 
    var i = document.createElement("input"); 
    i.setAttribute('name', 'csrfmiddlewaretoken'); 
    i.setAttribute('value', '{{ csrf_token }}'); 
    form.appendChild(i); 
    form.submit(); 
} 
</script> 
</body></html> 

Görünüm:

from django.shortcuts import render 

def quiz_score(request): 
    context = {'score': request.GET['Score']} 
    return render(request, 'quiz_score.html', context=context) 

urls.py: Elinizde JavaScript'inizin fark

url(r'^quiz_score/$', quiz_score) 

i.setAttribute('value', ""+score);. Belki de i.setAttribute('value', "+score"); veya benzeri bir şey mi olmalı?

Düz bir işlev görünümü ile gittim. TemplateView ve işlev tabanlı görünümün ilginç bir karışımı var. Eğer bir TemplateView kullanmak istese, böyle bir şey yapabileceğini:

from django.views.generic import TemplateView 

class QuizScoreView(TemplateView): 
    template_name = 'quiz_score.html' 

    def get(self, request, *args, **kwargs): 
     context = self.get_context_data(**kwargs) 
     context['Score'] = request.GET['Score'] 
     return self.render_to_response(context) 

urls.py: yardımcı

url(r'^quiz_score/$', QuizScoreView.as_view()) 

Umut!

+0

Teşekkürler! Bu iyi çalışıyor! –