javascript - 从 Django 中的 Javascript 表单访问 GET 表单数据

标签 javascript django python-3.x django-forms

我在使用 Django 从 Javascript 表单获取数据时遇到了问题。这是我的 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)

url.py:

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

我注意到您的 JavaScript 中有 i.setAttribute('value', ""+score);。也许应该是 i.setAttribute('value', "+score"); 或类似的东西?

我选择了直接函数 View 。您有 TemplateView 和基于函数的 View 的有趣组合。如果您想使用 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)

url.py:

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

希望有帮助!

关于javascript - 从 Django 中的 Javascript 表单访问 GET 表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36593770/

相关文章:

python - Django 1.9.4 模板继承不起作用

python - Python内存使用情况-无法正确释放变量

javascript - Chrome react 扩展

python - Django FormView 响应

javascript - window.open() 在 JS 函数中无法正常工作

django - 如何访问 Django-CMS 插件中的请求对象?

python - 使用 Pandas Dataframe 中的另一列数据拆分列数据

python - 写入文件错误和权限错误

javascript - Tablesorter - emptyTo 不工作

JavaScript 内部 101 : Hoisting variables and functions