当在django模板中将google maps嵌入url通过上下文变量(如`{{ maps_link }}`)传入`
在Django模板中,& 是HTML转义序列,用于在HTML文档中安全地表示 & 字符(避免与URL参数分隔符混淆)。当URL被硬编码在HTML中时,浏览器在解析HTML时会自动将 & 解码为 &,最终向Google Maps发起的请求是合法的:
但当URL作为Python字符串通过context传入模板(例如 {{ maps_link }}),Django默认会对变量内容进行HTML转义(防止XSS攻击)。若原始字符串已包含&(如数据库中存储的是HTML-safe形式),Django不会再次解码它——而是原样输出为字面量 &,导致
https://maps.google.com/maps?q=-25.797944,28.307176&hl=en&z=14&output=embed
↑↑↑ 这里多了一个未解码的 &
Google Maps服务器拒绝响应该URL,浏览器因此显示“refused to display in iframe”警告。
✅ 正确解决方案:在视图层预处理URL,确保&被还原为&
修改 views.py 中的上下文构造逻辑: