gpt4 book ai didi

django:如何在模板中包含静态文件?

转载 作者:行者123 更新时间:2023-12-04 04:16:11 24 4
gpt4 key购买 nike

在 Django 项目中,我想在模板中包含一个静态文件。以下是项目结构:

proj/
main/
static/
main/
js/
main.js
news/
templates/
news/
news.html

news.html ,我想包括 main.js具有以下假设格式:
{% load staticfiles %}
...

{% include {% static 'main/js/main.js' %} %}

我该怎么做?

最佳答案

我有几个想法。

最简单的方法是确保您拥有 filesystem loader启用,并且您在 TEMPLATES[0]['DIRS'] 中包含包含静态文件的相关目录(以前是 TEMPLATE_DIRS )。需要注意的是,除非您在 DIRS 中列出它们,否则它不会自动获取已安装应用程序中包含的静态文件。 , 也。另一种选择是使用 STATIC_ROOT ,但这只有在您运行 collectstatic 时才有效每次更改静态文件时,您通常不必在开发中这样做。另一个陷阱是它只适用于本地静态存储,如果您使用任何 CDN 或以其他方式将您的静态文件托管在不同的主机/网络/其他任何地方,则不能使用。

您可以做的另一件事是编写自己的模板加载器,它将使用静态文件 API 将静态数据加载为模板。这有点复杂,但它应该能够访问静态文件,而不管它们是如何存储和提供的。

如果您选择任何一个选项,您仍然必须小心。例如,您必须确保您作为模板包含的静态文件可以安全地包含到 HTML 或您使用它们的任何其他上下文中。不会有任何转义发生。

如果您试图优化客户端必须发出的请求数量,还有更好的方法。您很可能最好实现一些管道来预处理和缩小您的静态文件。在 HTML 中包含任何重要的 CSS/JS 块将使客户端无法利用缓存,迫使他们一遍又一遍地重新下载相同的静态内容,可能会对性能产生负面影响。

编辑:由于您只想包含一些动态 JavaScript 变量,因此它根本不是静态文件。您真正想要的是创建一个包含 JavaScript 代码的模板,而不是将静态文件作为模板处理。没有规则会说每个 javascript 都需要是一个静态文件。如果它是动态的,则它不是静态文件。

作为记录,这是 XY problem 的典型实例。 .问题 X 是在渲染模板时动态地为 JavaScript 变量赋值。您想出在模板中包含静态文件作为潜在的解决方案,但随后遇到了问题 Y,即您不知道如何在模板中包含静态文件。

关于django:如何在模板中包含静态文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36590809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com