我有一个使用 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 标记存储 url
data
标签(再次通过 django 模板)
- 创建一个 API 来获取 URL(这看起来很疯狂,而且性能方面会很糟糕)。
只是想知道是否有标准实践或库可以解决这个问题?我多次遇到这个问题,但从未找到满意的解决方案。