从Django中的Javascript Form访问GET Form数据

Accessing GET Form data from - Javascript Form in Django

本文关键字:Form 访问 数据 GET Javascript Django 中的      更新时间:2024-06-07

在从Javascript表单获取数据方面,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中使用它了。

如果你需要更多的细节,请发表评论,我会把它们添加到下面的问题中。

我使用了以下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())

希望能有所帮助!