【问题标题】:Django Ajax request issues with data returned in my templateDjango Ajax 请求与我的模板中返回的数据有关
【发布时间】:2017-06-20 22:46:53
【问题描述】:

在我的 django 项目中,我为动态显示和填充字段进行了 ajax 调用。 首先,在我的模板中我创建了元素:

模板 html

<select class="form-control" onChange="AddOptions(this);">
    {% for entry in all_test %}
        <option id="mainID" value="{{ entry.id }}">{{ entry.descr }}</option>
    {% endfor %}
</select>
<div id = "div_val" class="input-group" style="display: none;">
                <div class="input-group-btn">
                  <button id = "btn_val" type="button" class="btn btn-danger">Test</button>
                </div><!-- /btn-group -->
                <input type="text" class="form-control">
              </div>

然后在我的 js 中:

start.js

function AddOptions(VarID) {
$.ajax({
    type: "POST",
    url: "ajax",
    data: {mainID: VarID.value},
    success: function (data) {
        $.each(data, function (index) {
            $("#div_val").show();
            console.log("Key: " + data[index].OptionKey+" Val: "+ data[index].OptionVal)
        });
    }
});
}

urls.py

url(r'^ajax$', mainoptions),

最后是我从 urls.py 调用的 python 函数:

from frontend.models import temp_main, temp_case, temp_variables


def mainoptions(request):
    if request.is_ajax():
        mainOptions = temp_variables.objects.filter(main_id=int(request.POST['mainID']))
        response = []
        for i in mainOptions:
            vallabel = {}
            vallabel['OptionID'] = i.id
            vallabel['OptionKey'] = i.v_key
            vallabel['OptionVal'] = i.v_val
            response.append(vallabel)
        json = simplejson.dumps(response)
        return HttpResponse(
        json, content_type='application/json'
        )
    else:
       pass

全部完成,我在模板中隐藏的 div“div_val”已显示,但现在我无法理解如何在模板中使用返回的数据,例如,填充 div 内元素的值(无需在我的 js func 中使用 jquery 即可)。 如何关闭链模板 -> js -> urls -> 查看方法 -> 模板?

提前致谢

【问题讨论】:

    标签: javascript jquery python ajax django


    【解决方案1】:

    当您使用服务器端渲染时,您不能轻易关闭您所指的“链”。这是因为 Django 在这种情况下所做的是在一个初始响应中提供所有 HTML 和 JS(至少是 HTML 视图中的 JS)。之后您执行的 ajax 请求将不会绑定到您最初在响应中发送的变量,因为在调用 render() 函数时会填充这些变量。在那之后,您将无法添加或更新发送到 HTML 模板的变量。

    您可以管理呈现 HTML 的小部分的唯一方法是使用 JQuery 或使用 Django Rest Framework 使您的后端成为 REST API,并迁移到更完整的前端框架,如 Angular 或 React。关于服务器端渲染与客户端渲染的讨论很多。

    您可以在此处阅读更多信息:

    https://medium.com/@adamzerner/client-side-rendering-vs-server-side-rendering-a32d2cf3bfcc

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 2013-01-21
      • 2011-11-29
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      相关资源
      最近更新 更多