如何访问由 AJAX 响应返回到模板的查询集 - Django
Posted
技术标签:
【中文标题】如何访问由 AJAX 响应返回到模板的查询集 - Django【英文标题】:How to access Queryset returned to template by AJAX response - Django 【发布时间】:2021-03-31 05:06:23 【问题描述】:我想使用 ajax 将查询集返回到模板。
这是我在一个单独的 js 文件中的 ajax 函数:
$(document).ready(function()
$("#data_to_plot_button").click(function()
var serialized_data = $("#data_to_plot_form").serialize();
$.ajax(
url: $("data_to_plot_form").data('url'),
data: serialized_data,
type: 'post',
success: function(response)
$("#graph").append('<p>data returned successfuly</p>'); //this line is printed correctly.
$.each(response, function(i, val)
$('graph').empty().append(
$('<li>').addClass('list-group-item list-group-item-success').text(val)
)
); // this block adds nothing to the #graph div
)
);
);
还有我的views.py
:
def my_products(request):
queryset_list_intro_products = Intro_products.objects.all().order_by('title')
products = 0
if request.method == 'POST':
products_checkbox = request.POST.get('products')
if products_checkbox:
products = serializers.serialize('json', list(queryset_list_intro_products))
context =
'products': products,
return JsonResponse(context, status=200)
return render(request, 'users/basket/my_products.html')
根据对此question 的回答,我尝试访问response
中返回的products
。但是 js 代码没有向#graph
div 添加任何内容。
在 Chrome 中检查的网络选项卡的 XHR 部分中,ajax 调用的状态为 200,在预览部分中我可以看到 products
如下:
产品:“[”model”:“products.intro_products”,“pk”:5,“fields”:“products_intro”:假,“ip_sensor_intro”:假,“control_valve_intro”:假,“water_quality_sensor_intro” : false, "accessories_intro": true, "cover_intro": "photos/products/intro_cover/solutions.png", "title": "Accessories", "subtitle": "", "description": "
description
”、“detailed_description”:“”、“video_link”:“”、“is_published”:true、“image_left”:“”、“title_left”:“”、“description_left”:“” , "image_right": "", "title_right": "", "description_right": "",
如何在知道查询集的情况下访问 ajax 响应的字段?
【问题讨论】:
嗨,你错过了#
附近的$('graph')..
@Swati 谢谢你的朋友,但没有帮助!
显示您的例外输出。另外,您添加的json是控制台结果吗?即:console.log(response)
?
【参考方案1】:
你需要做这样的事情;
from django.template.loader import render_to_string
if request.is_ajax():
html = render_to_string(
template_name="your seperate template where you want to display the queryset",
context=dict_of_items_to_be_passed_to_above_temp.
)
data_dict = "html_from_view": html
return JsonResponse(data=data_dict, safe=False)
【讨论】:
在 django 3.1 中不是request.is_ajax()
deprecatd 吗?以及如何在ajax方法的成功函数中使用js文件中的html
?
我使用相同的东西进行搜索。这工作正常。 js中也可以使用data_dict来解析数据。以上是关于如何访问由 AJAX 响应返回到模板的查询集 - Django的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何在 ajax 中返回模型表单集并在模板中使用