Django AJAX无渲染模板

时间:2016-06-01 15:21:43

标签: javascript jquery html ajax django

我在HTML页面上有一个设备列表。用户可以从该列表中选择设备,然后单击按钮以提交该设备。

<button class="btn btn-primary" onclick="saveSelectedRow()" type="submit" name="select" value="Select">Select Device</button>

选择行并单击按钮后,将调用以下Javascript。

function saveSelectedRow() {
    var data = getSelectedRow();
    var csrftoken = getCookie('csrftoken');

    $.ajaxSetup({
        beforeSend: function (xhr, settings) {
            if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                xhr.setRequestHeader("X-CSRFToken", csrftoken);
            }
        }
    });

    $.ajax({
        type: "POST",
        url: "/register/",
        data: {
            csrfmiddlewaretoken: csrftoken,   // < here
            "data": data,
        }, 
    })
}

AJAX请求发布到以下视图:

def register(request):
if request.method == 'POST':
    if request.is_ajax():
        form = RegisterDeviceForm()
        return TemplateResponse(request, 'DeviceRegistration/register_device.html', {'form': form})

此时我想从AJAX请求中获取数据并使用它来填充请求模板的表单字段。我可以设置断点并观察以下两行执行:

form = RegisterDeviceForm()
return TemplateResponse('DeviceRegistration/register_device.html', {'form': form})

但没有任何反应。我一直在阅读,我可能需要呈现HTML,然后使用我的AJAX请求的.success回调来更改HTML?但是,我无法让这个工作。如果我稍微更改上面两行的两个if语句,检查另一个按钮的名称,这些行完美地执行并使用表单呈现模板。但是使用AJAX请求没有相同的功能。

任何帮助都将不胜感激。

编辑#1:

我在request()视图中更改了一些代码:

form = RegisterDeviceForm()
return render_to_response('DeviceRegistration/register_device.html', {'form': form})

并为Ajax调用添加了一个成功方法:

$.ajax({
    type: "POST",
    url: "/register/",
    data: {
        csrfmiddlewaretoken: csrftoken,   // < here
        "data": data,
    },
    success : function(data) {
        alert("success!");
    }
})

当我检查success函数中的数据变量时,它包含我想要呈现的HTML。我假设有可能让我的Django Python脚本呈现视图,但似乎我需要让javascript做到这一点?

编辑#2:

我想新问题已成为我如何才能拥有此代码:

 <form method="POST" action="/register/">
     {% csrf_token %}
     <button class="btn btn-primary" onclick="getSelectedRow()" type="submit" name="select" value="Select">
          Select Device
     </button>
 </form>

从onclick =&#34; getSelectedRow()&#34;返回数据到/ register / page?上面的代码成功转到注册页面,但我无法访问用户选择的数据。

0 个答案:

没有答案