为啥这个 Django 模板没有接收到上下文?
Posted
技术标签:
【中文标题】为啥这个 Django 模板没有接收到上下文?【英文标题】:Why is this Django Template not receiving the context?为什么这个 Django 模板没有接收到上下文? 【发布时间】:2021-06-27 17:15:18 【问题描述】:我正在使用一个简单的视图来呈现一个“index.html”页面,并在上下文变量中传递一个 JSON。
def index(request):
"""Homepage. Calls are made to other classes from here."""
ytv = YoutubeVideos()
user = request.GET.get('user', '')
videos = 'name': 'filler data here'
if user != '':
videos = ytv.get(request=request, channel_data=1)
print(videos)
return render(request, 'index.html', context=videos)
return render(request, 'index.html', context=videos)
我已经确认它正在通过第一次返回,视频上下文包含 JSON 数据。它正在控制台中打印。
我还有 index.html 文件,其中包含:
...
videos|json_script:'name'
<script>
'use strict';
var videos = JSON.parse(document.getElementById('name').textContent);
...
我尝试了几种在 javascript 中获取 JSON 数据的方法,包括:
<input type="hidden" id="myVar" name="videos" value=" videos ">
然后以这种方式在javascript中获取值,
var myVar = document.getElementById("myVar").value;
问题是当 html 被渲染时它变成了这个(Source 的截图):
基本上,该变量在渲染时看起来并不存在。 任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您需要像这样传递视频数据:
return render(request, 'index.html', 'videos': videos )
在模板中你会得到它。
【讨论】:
我也尝试过这种变化,但没有运气。结果完全一样。 我猜你有多个视频,所以你需要使用 for 循环来循环模板中的视频。 'videos' 是一个 JSON,第一层有 4 个项目,下面还有更多嵌套。我无法访问其中任何一个。 @AlexGriffith 你也修复了你的模板吗? 如果您有多个视频,您的方法将不起作用。以上是关于为啥这个 Django 模板没有接收到上下文?的主要内容,如果未能解决你的问题,请参考以下文章
Django - % csrf_token % 在模板中使用,但上下文没有提供值