2016-04-13 56 views
0

我在從Javascript表單獲取數據方面遇到了問題。這裏是我的Javascript代碼...訪問GET表單數據 - Django中的Javascript表單

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(); 
} 

我知道使用GET並不理想,但是我無法獲得POST工作,它根本不會重定向到目標頁面。

這是我的Django類和函數...

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


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

我只是試圖讓比分變量,所以我可以在Python中使用它。

如果您需要更多詳細信息,請發表評論,我會將它們添加到下面的問題中。

+0

目前還不清楚你在這裏問什麼。什麼是'quiz_score'方法?什麼叫它? –

回答

1

我得到了它使用下面的HTML工作/ 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> 

查看:

from django.shortcuts import render 

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

urls.py:

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

我在你的JavaScript注意到你有i.setAttribute('value', ""+score);。也許這應該是i.setAttribute('value', "+score");或類似的東西?

我去了一個直觀的功能視圖。您有一個有趣的TemplateView和基於功能的視圖組合。如果你想使用一個TemplateView,你可以這樣做:

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:

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

希望幫助!

+0

謝謝!這效果很好! –