JavaScript文件中的Django {%static'path'%}

luc*_*huy 23 django

在我的script.js中:

pic.src = "/static/photos/1.jpg"; // This works
pic2.src = "{% static 'photos/1.jpg' %}" // Does not work
Run Code Online (Sandbox Code Playgroud)

为什么世界会发生这种情况?因为在我的home.html中,{%static'路径'%}有效:

{% load staticfiles %}
<script src="{% static 'script.js' %}"></script>  // This works
Run Code Online (Sandbox Code Playgroud)

是{%load staticfiles%}还是{%load static%}?这两个都适用于我,script.js已加载.

aus*_*acy 30

由于您使用的是django的模板语言,因此您只能<script>标签之间的模板中执行此操作.换句话说,如果你想pic2.src外部脚本中使用你的javascript变量,那么你需要在<script>标签之间声明它,就像这样

<script>
    var pic2.src = "{% static "photos/1.jpg" %}"
</script>
Run Code Online (Sandbox Code Playgroud)

然后你可以在你可能加载的外部脚本中访问它:

<script type="text/javascript" src="{% static "js/my_external_script.js" %}"></script>
Run Code Online (Sandbox Code Playgroud)

关于你的问题,load staticload staticfiles没有什么区别.两者都充当了STATIC_URLsettings.py和文件本身的实际路径的木匠,所以两者都适用于你的情况.有关详细信息,请参阅此处此处.

  • 需要特别注意的是,如果您使用云服务存储静态文件(例如AWS S3),则“ load static”和“ load staticfiles”之间会有很大的不同,这让我花了很多时间。 。“ staticfiles”会动态获取正确的文件存储后端,而“ static”只会始终使用默认值。如果您使用“ static”而不是“ staticfiles”,则您的代码将无法在AWS中正常工作。 (2认同)

knb*_*nbk 9

如果您的文件中需要许多静态(或媒体)URL .js,这可能更方便:

<script>
    var static_url = "{% get_static_prefix %}";
    var media_url = "{% get_media_prefix %}";
</script>
Run Code Online (Sandbox Code Playgroud)

然后两个url都可以在所有javascript文件中免费使用.


nim*_*ima 5

您可以在模板中指定路径,然后在javascript文件中使用它.

模板:

<script>
    var url = "{% static 'photos/1.jpg' %}";
</script>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

pic2.src = url
Run Code Online (Sandbox Code Playgroud)


小智 5

简单的解决方法!:)

索引.html

<input type="hidden" id="pic-src" value="{% static 'photos/1.jpg' %}">
Run Code Online (Sandbox Code Playgroud)

脚本.js

var pic2.src = $('pic-src').val();
Run Code Online (Sandbox Code Playgroud)