request.method=='获取',但是在GET QueryDict对象内没有项目

request.method == 'GET', but has no items within the GET QueryDict object

本文关键字:对象 QueryDict 项目 GET 获取 method request      更新时间:2023-09-26

在互联网上搜索了几个小时都无济于事之后,我来到这里,希望有人能引导我朝着正确的方向前进。

因此,我是django的新手,一直在尝试在模板中使用ajax将数据传递到视图。我有从数据库中填充的下拉菜单,当用户选择结果和模型的类型时,我只是想让它将这些值传递给视图方法。我之所以这么做,是因为视图页面通过接受这些变量(结果、模型)的perl脚本生成html页面,从而填充模板(使用extends)。

view.py

 def platform_pass_rate(request):
 #some other stuff
 #This is currently always true
    if request.method == 'GET':
        #It is an issue however, because this never gets anything, just as request.GET.items() returns nothing
        resultVar = request.GET['resultValue']
        # modelVar = request.POST['selectedModelValue']
        subprocess.call(["perl", "static/static/perl/passRateByPlatform.pl", resultVar, "Ahmed_00"])
        #This calls the perl script. Currently set up so that just a default result is entered - so I now GET is working
    else:
        subprocess.call(["perl", "static/static/perl/passRateByPlatform.pl", "liftforce", "Ahmed_25"])
        #Default html page created by script when user does not select anything
    current_url = get_full_path(request)
    return render_to_response("data_form_platform.html", {'our_url': current_url, 'study_models': study_models,'study_results': study_results})

urls.py

from django.conf.urls import patterns, include, url
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('AppFalconV1.views',
    # Examples:
    url(r'^$', 'home'),
    url(r'^Pass_Rate_by_Build/$', 'build_pass_rate'),
    url(r'^Pass_Rate_by_Platform/$', 'platform_pass_rate'),
    url(r'^Platform_Coverage/$', 'platform_coverage'),
    url(r'^Regression_Coverage/$', 'regression_coverage'),
    url(r'^Coverage_All_Builds/$', 'coverage_all_builds'),
    # url(r'^test/$', 'get_current_url'),
    url(r'^time/$', 'current_datetime'),
    #url(r'^time/plus/('d{1,2})/$', 'hours_ahead'),
    url(r'^admin/', include(admin.site.urls)),
)
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL,
                          document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

修改了base.html中的脚本

<script type="text/javascript">
    $(document).ready(function () {
        {#        $.ajaxSetup({ cache: false });#}
        var current_url = $('#current_url').text();
        var id = current_url.trim();
        $('#' + id).addClass('active');
        $('#platform_data_form_button').click(function () {
            var selectedResultValue = $('#platform_type_of_result :selected').text();
            console.log(selectedResultValue);
            var selectedModelValue = $('#platform_models :selected').text();
            console.log(selectedModelValue);
            $('#platform_type_of_result').change(function () {
                var selectedResultValue = $('#platform_type_of_result :selected').text();
                console.log(selectedResultValue);
            });
            $('#platform_models').change(function () {
                var selectedModelValue = $('#platform_models :selected').text();
                console.log(selectedModelValue);
            });
            $.get("/Pass_Rate_by_Platform/", { resultValue: selectedResultValue, modelValue: selectedModelValue}, function (response) {
                console.log("workinggggggg");
                //alert(response);
            });
        });
    });
</script>

下拉按钮的位置-data_form_platform.html

{% extends 'platform_pass_rate.html' %}
{% block data_form_platform_content %}
    <form class="form-horizontal">
        <fieldset>
            <div class="form-group">
                <label class="col-md-2 control-label" for="type_of_result">Type of result</label>
                <div class="col-md-3">
                    <select id="platform_type_of_result" name="type_of_result" class="form-control">
                        {% for result in study_results %}
                            {% if result != "testid" and result != "studyid"%}
                        <option value="{{ result }}">{{ result }}</option>
                            {% endif %}
                        {% endfor %}
                    </select>
                </div>
            </div>
            <div class="form-group">
                <label class="col-md-2 control-label" for="model">Model</label>
                <div class="col-md-3">
                    <select id="platform_models" name="model" class="form-control">
                        {% for model in study_models %}
                        <option value="{{ model }}">{{ model }}</option>
                        {% endfor %}
                    </select>
                </div>
                <label class=" control-label" for="model"></label>
                <div class="col-md-1" style="margin-left: -20px" id="platform_data_form_button">
                    <a href="" class="btn btn-primary btn-success" ></span> Confirm</a>
                </div>
            </div>
        </fieldset>
    </form>
{% endblock %}

这似乎只是Javascript的一个问题。第一次加载页面时,可能是在未选择任何值的情况下,您将获得selectedResultValue的值。Ajax请求是在单击按钮时发出的,但您不会在单击函数中获取新值:因此您仍然使用旧的空值。只需在函数内移动该行。