json - 带有上下文的 Django JsonResponse
问题描述
我可以使用函数 JsonResponse 并返回带有 dict 上下文的 .json 文件吗?我只有一个.html,如果我点击href ajax 将获得.json 文件并切换div。
html:
<form id='FormSite' method="POST">
{% csrf_token %}
<div id='Bilboard'>
<div id='Pic'>
<video id='VideoStart' style="width: 100%; height: 100%;" autoplay preload="true" loop >
<source src="static/video/mainVideo.mp4"poster="static/img/facebook.png" type='video/mp4'>
Your browser does not support the video tag.
</video>
</div>
<div id='Wpis'>
<h1 id='HeaderWpis'>Aktualności:</h1>
<div id='WpisChild'>
{% for News in Messags %}
<div id='NewsPapper'>
<p style="font-size: 200% !important;">{{ News.title }}</p>
<img src="static/img/line.png" style="width: 5%; height: 5%; position: relative !important; left: 50%; transform: translateX(-50%);">
<p style="font-size: 150% !important;">{{ News.text |linebreaksbr }}</p>
<img src="static/img/line.png" style="width: 5%; height: 5%; position: relative !important; left: 50%; transform: translateX(-50%);">
<p style="font-size: 150% !important;">{{ News.Data }}</p>
</div>
{% endfor %}
</div>
</div>
</div>
</form>
视图.py
def FirstStart(request):
if request.method == 'POST':
respone = {}
UrlCut = request.GET.get('site','')
if(len(UrlCut) > 0):
File_read_to_div = open('templemates/'+UrlCut+'.txt','r')
else:
File_read_to_div = open('templemates/Main.txt','r')
respone['Pic'] = str(File_read_to_div.readline())
respone['h1'] = str(File_read_to_div.readline())
respone['WpisChild'] = str(File_read_to_div.readline())
#r
Messages = NewsMessage.objects.all().order_by('-Data')
context = {
"Messags" : Messages
}
return JsonResponse(respone, context)
Messages = NewsMessage.objects.all().order_by('-Data')
context = {
"Messags" : Messages
}
return render(request, 'main.html', context)
阿贾克斯
$.ajax({
url: url,
data: $('#FormSite').serialize(),
type: "POST",
async:false,
success: function(response) {
$($("#Pic").first()).replaceWith($(response['Pic']));
$("#HeaderWpis").text(response['h1'])
$($("#WpisChild").first()).replaceWith($(response['WpisChild']))
},
error: function()
{
alert('Bad connection');
}
});
所以,如果我首先加载 main.html {{ News.title }} 等工作。但是如果 ajax/django 从 .txt 加载这个站点,他找不到上下文并显示错误功能。
解决方案
JsonResponse 不将上下文作为参数。
https://docs.djangoproject.com/en/3.0/ref/request-response/#jsonresponse-objects
第一个参数 data 应该是一个 dict 实例。如果安全参数设置为 False(见下文),它可以是任何 JSON 可序列化对象。
>>> from django.http import JsonResponse
>>> response = JsonResponse({'foo': 'bar'})
>>> response.content
b'{"foo": "bar"}'
在您的情况下,您应该能够将消息添加到您的字典中:
respone['messages'] = NewsMessage.objects.all().order_by('-Data')
return JsonResponse(respone)
推荐阅读
- ruby-on-rails - 回滚事务和没有为 PlayersController#create 找到模板,在 rails 中渲染头:no_content
- r - R在字符串列表中查找字符匹配的所有索引
- ejabberd - 如何使用 MSSQL 配置 Ejabberd 服务器
- javascript - 动态/异步组件渲染
- javascript - addEventListener 对点击事件不起作用……
- python - pandas.interpolate (method = 'linear') 只复制第一个和最后一个点的值
- r - Quantmod getSymbols 系统地返回中国股票的缺失值
- ios - 如何使用 CollcetionViewCell 内的按钮删除单元格本身
- javascript - Facebook JS API:用户没有保持连接
- java - Selenium:无法从父元素中提取子元素