将变量从javascript传递到django模板

时间:2013-11-30 16:13:30

标签: javascript django django-templates

我想从客户端发送一个字符串值作为javascript变量,以便在django-template中使用。具体来说,字符串是图像的相对路径,它将在django模板中使用,django模板标记为static。静态文件位于Amazon S3上,应使用django模板的静态标记提供。

在django模板中,我需要来自javascript的变量photo_url。

<img class = "main-img" src = "{% static photo_url %}" alt="main photo" />

目前,在javascript中,我已经使用photo_url嵌入了span的innerhtml作为照片的相对网址(/static/images/abc.png):

<img class = "main-img" src = ' + photo_url + ' alt="main photo" />

但是这样,即使我在javascript中的innerhtml中包含静态标记,我也无法从S3提供静态文件。最好的方法是什么(将javascript变量传递给django模板)?

2 个答案:

答案 0 :(得分:1)

{% static %}只是一个便利标签,您可以随时对您的静态网址进行硬编码 您将无法在{% static %}标记中使用js变量(无论是附加它们还是无论如何),因为js与html一起呈现而不进行任何处理。

答案 1 :(得分:0)

如果模板中有STATIC_URL,您可以设置全局JS变量来存储它:

<script>
STATIC_URL = '{{ STATIC_URL }}';
</script>

然后在功能

中包装照片网址的创建
function photo_url(photo) {
    return STATIC_URL + photo_url;
}

这样你就可以达到你想要的效果。

或者,您可以在模型上定义get_absolute_url()方法,以提供包含域名的完整网址。