从外部javascript正确访问django静态文件

2024-06-08

我有一个使用 AngularJS 的 django 应用程序以及一堆 JavaScript 和模板文件。

在我的 django 模板中我可以使用{% static %}标签来正确引用这些文件,如下所示:

<script src="{% static "angular/myapp.app.js" %}"></script>

然而,外部文件本身显然无法通过 django 的模板框架解决 https://stackoverflow.com/questions/27932983/django-static-path-in-javascript-file所以这不是一个选择。因此,人们最常做的就是对静态路径进行硬编码:

$routeProvider.when('/', {
   // this works but is not ideal
   templateUrl: '/static/pages/some-angular-template.html',  
})

我看到了加载的建议STATIC_URL到某个地方的 javascript 中并使用它来构造引用。像这样的事情:

Django 模板:

var STATIC_URL = {{ STATIC_URL }};
function getStaticUrl(templatePath) {
  return STATIC_URL + templatePath;
}

外部JS:

$routeProvider.when('/', {
   templateUrl: getStaticUrl('/pages/some-angular-template.html'),
})

这好一点,但仍然不完美,因为它只处理基本路径。如果你想使用类似的东西ManifestStaticFilesStorage https://docs.djangoproject.com/en/2.0/ref/contrib/staticfiles/#manifeststaticfilesstorage(我这样做)那么你仍然没有得到文件的正确分辨率。

对于这个问题有什么好的解决办法吗?我正在考虑的选项:

  • 将所有必要的 URL 引导到 django 模板内的 JS 变量中
  • 使用一些隐藏的 HTML 标记存储 urldata标签(再次通过 django 模板)
  • 创建一个 API 来获取 URL(这看起来很疯狂,而且性能方面会很糟糕)。

只是想知道是否有标准实践或库可以解决这个问题?我多次遇到这个问题,但从未找到满意的解决方案。


我当前的解决方案(即使不是最优雅的,也可以正常工作)只是在 django 模板中创建一个巨大的全局常量字典,然后直接在 JS 中引用它们。

Django 模板:

<script type="text/javascript">
    NG_STATIC_FILES = {
       "HOME": "{% static '/pages/home.html' %}",
       "SOMETHING_ELSE": "{% static '/pages/some-angular-template.html' %}",
    };
</script>

外部JS:

$routeProvider.when('/', {
    templateUrl: NG_STATIC_FILES.SOMETHING_ELSE,
})

etc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从外部javascript正确访问django静态文件 的相关文章

随机推荐