【问题标题】:Django & Ajax : data get lost between the view and the templateDjango & Ajax:数据在视图和模板之间丢失
【发布时间】:2021-05-24 18:33:41
【问题描述】:

使用 Ajax 和 Django,我的数据在发送回我的模板时会丢失并且我无法检索它们。 这是我的代码和逻辑: 遵循 ["Simple is Better Than Complex"][1] 提供的相关下拉列表教程 我已经实现了一个 Ajax 请求。 这是html代码:

 <p class="multiple-choice" id="mandate-city" data-url="{% url 'officials:ajax_load_mandate_city' %}">Local Mandate: {{ form.mandate_city }}</p>

ajax 请求是从此脚本触发的:

<script>
    $("#id_departments").change(function (){
        var url = $("#mandate-city").attr("data-url");
        var departmentId = $(this).val();
        $.ajax({
            url: url,
            data: {
                'department': departmentId
            },
        success: function (data){
            $("#id_mandate_city").html(data);
            console.log(data);
        }
        });
    });
</script>

通过console.log检查后,脚本收集数据。然后,他们到达了视野。 这是我的看法:

def load_mandate_city(request):
    department_id = request.GET.get('department')
    mandate_city = MandateCity.objects.filter(department_id=department_id).order_by("department")
    return render(request, "officials/mandate_city_list.html", {mandate_city: mandate_city})

通过打印,我已经检查过了,数据按计划处理。 然后数据通过url发回:

path('ajax/load_mandate_city/', views.load_mandate_city, name="ajax_load_mandate_city")

他们似乎没有到达模板:

{% for mandate in mandate_city %}
    <option value="{{ mandate.pk}}">{{ mandate.get_mandate_display }}</option>
{% endfor %}

而且我无法在我的脚本中跟踪它们。 :-/ 有人可以让我知道错误在哪里吗? 谢谢。 [1]:https://simpleisbetterthancomplex.com/tutorial/2018/01/29/how-to-implement-dependent-or-chained-dropdown-list-with-django.html

【问题讨论】:

  • 如果您在返回函数 load_mandate_city 之前打印 task_city,您会得到结果还是只是一个空列表?
  • 如果我在视图中打印任务城市,就在返回上方,我得到查询集。

标签: django ajax


【解决方案1】:

您是否尝试将信息返回到 json 对象中,然后使用客户端 js 进行渲染?通常,当您使用 ajax(或 fetch)时,您希望使用返回的信息,因此最好将其作为数据类型返回, 如果您确实想返回 html 响应,您可能不应该使用 ajax 而应该使用表单

【讨论】:

  • Ajax 和 JS 对我来说主要是 Terra Incognita,简单的目的是在已经存在的模板中包含 e 列表。实际上,结果应该包括用新定义的行替换初始的 html 行。如果你知道这方面的教程?
猜你喜欢
  • 2019-03-14
  • 2015-11-27
  • 2011-09-14
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
相关资源
最近更新 更多