将JS变量传递给Django视图

3
我正在使用jQuery的.submit()函数来计算两个变量(f_amount和f_variables),但我不知道如何将它们传递到下一个Django视图。
<form method="POST" action="/app/view">{% csrf_token %}                    
                    <select  id="fd" name="fd">
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="5">5</option>
                        <option value="1">1</option>
                    </select>

                <div id="demo2" class="demo">
                <ul>
                {% for f_type, fs in f.items %}
                    <li>
                        <a>{{ f_type }}</a>
                        <ul>
                            {% for f in fs %}
                                <li><a id="{{f.0}}">{{f.1}}</a></li>
                            {% endfor %}
                        </ul>
                    </li>
                {% endfor %}
                </ul>
                </div>
                <input id="plan" type="submit" value="sched it!" class="btn primary" />
        </form>

<script>
$("form").submit(function() {
                var checked_ids = new Array();
                var f_amount = $("select option:selected").val();
                $("#demo2").jstree("get_checked",null,true).each 
                    (function (index,value) {
                        if (value.children[2].id) { 
                            checked_ids.push(value.children[2].id); 
                        }
                    });
                var f_ids = checked_ids.join(" ");

 });
</script>

下一个Django视图?为什么不先关注当前的Django视图呢。 - Ignacio Vazquez-Abrams
它们应该可以通过请求的 request.POST querydict 对象从您的视图中访问。您可以在这里找到有关 querydict 的更多信息:https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict - fourk
这是在表单提交后加载的视图中获得的QueryDict,变量f_amount和f_ids不在字典中: <QueryDict:{u'check_1242':[u'1'],u'check_7599':[u'1'],u'check_9103':[u'1',u'1'],u'check_9293':[u'1'],u'check_7202':[u'1'],u'check_8142':[u'1'],...} - Rod0n
1个回答

1
I could do it this way in Django 2.1. x123.html 首先在第一个html文件中创建一个隐藏的输入字段,像这样:
<form id="scoresForm" method="POST">
  {% csrf_token %}
  <input type="hidden" name="scores" value=""/>
</form>

views.py中定义您的视图,然后处理POST数据。

def result(request, league_id, season_id, matchday):
    scores = request.POST.get("scores", None)
    if scores != None:
        scores = scores.replace("&quot;", "'")
    #scores = scores[1:-1]
    scores = json.loads(scores)
    context = {
        'league_id': league_id,
        'season_id': season_id,
        'matchday': matchday,
        'scores': scores,
    }
    return render(request, 'matchstatistics/result.html', context)

x123.js 最后在属于您的第一个 HTML 模板的 JS 文件中。

    var resultUrl = currentUrl + "/result/" + league_id + "/" + season_id + "/" + matchday + "/";
    var scoresForm = document.forms['scoresForm'];
    scoresForm.action = resultUrl;
    scoresForm.elements["scores"].value = JSON.stringify(scores);
    document.getElementById("scoresForm").submit();

y123.html 通过在Django模板中调用{{ scores }}, 您可以轻松地访问传递的数组/变量。

请随意优化代码,特别是JSON对象的序列化和反序列化部分,我是Django / Python / JavaScript的新手 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接