我试图在django模板中接收上下文数据,并在javascript中使用它。目前,我收到的数据,但作为一个字符串,它看起来是胡说八道。
我的代码:
{% extends "base.html" %}
{% block content %}
{% if search_list %}
<!-- do something -->
{% endif %}
<!-- javascript code -->
{% block script %}
<script >
let data = '{{search_list}}'
console.log(data);
</script>
{% endblock script %}
{% endblock %}
和views.py
from django.shortcuts import render
from .models import search_history
def index(request):
search_list = search_history.objects.order_by('-query_date')[:10]
context = {'search_list': search_list}
return render(request, 'search_history/index.html', context)
如果删除javascript中变量search_list
中的引号,它将显示错误。我使用过jsonify
和safe
标签,它不起作用。如何在这里作为对象获取数据?
发布于 2021-03-27 10:40:40
以JSON形式返回数据
import json
def index(request):
search_list = search_history.objects.order_by('-query_date')[:10]
context = {'search_list': json.dumps(search_list)}
return render(request, 'search_history/index.html', context)
把它放进js里
let data = JSON.parse("{{ search_list | escapejs }}");
或
let data = {{ search_list | safe }};
并考虑将所有这些转变成更优雅的方式:
然而,发出ajax请求有点复杂,需要手动发送csrf等等,但是您不必在最后的html中呈现大常数json值。
那么,json响应的视图和原始视图应该是这样的:
def index(request):
return render(request, 'search_history/index.html')
def get_search_list(request):
search_list = search_history.objects.order_by('-query_date')[:10]
return JsonResponse({'search_list': search_list})
https://stackoverflow.com/questions/66822056
复制相似问题