首页 > 解决方案 > Django - 传递给模板时修改了上下文

问题描述

我有一个返回 S3 对象的预签名 url 的函数,我想在我的模板中使用它。

这是我在views.py中的函数:

def player_index(request):
    mpd_url = update_file.mpd_url()
    vtt_url = update_file.vtt_url()
    context = {
        'mpd_url': mpd_url,
        'vtt_url': vtt_url,
    }

    return render(request,'index.html',context)

这是我的模板的一部分,带有上下文:

var url = '{{ mpd_url }}';

player.vttThumbnails({
  src: '{{ vtt_url }}'
});

但似乎 urls 在我的函数和模板中不匹配:当我在 views.py 中打印它时:https://realtime-video-logs.s3.amazonaws.com/test/manifest.mpd?AWSAccessKeyId=AKIAVT3T733IUIUYBBMB&Signature=ZA9mgVjXvBShKAdvjw6hgeOwC1o%3D&Expires=1563980730

在我的模板中:https://realtime-video-logs.s3.amazonaws.com/test/thumbs.vtt?AWSAccessKeyId=AKIAVT3T733IUIUYBBMB&Signature=jqDfi15GLB77DmzrNkVn743HPdA%3D&Expires=1563981729

'&' 替换为 ';' 我不明白为什么。

标签: pythondjango

解决方案


这是合乎逻辑的,Django HTML 对字符串进行编码。例如,如果您的文本包含一个,&那么 Django 会将其替换为&,否则&将不可见。

|safe你可以通过应用模板过滤器 [Django-doc]来关闭它。然后 Django 将:

将字符串标记为在输出之前不需要进一步的 HTML 转义。当自动转义关闭时,此过滤器无效。

例如:

var url = '{{ mpd_url|safe }}';

player.vttThumbnails({
  src: '{{ vtt_url|safe }}'
});

推荐阅读