在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' %} %}
我该怎么做?
我有两个主意。
最简单的方法是确保已启用文件系统加载器,并且在TEMPLATES[0]['DIRS']
(以前是TEMPLATE_DIRS
)中包含了包含静态文件的相关目录。需要注意的是,除非您DIRS
也在中列出了静态文件,否则它不会自动提取已安装的应用程序中包含的静态文件。另一个选择是使用STATIC_ROOT
,但这仅在collectstatic
每次更改静态文件时都运行时才起作用,而在开发中通常不需要这样做。另一个陷阱是,它仅适用于本地静态存储,如果您使用任何CDN或以其他方式将您的静态文件托管在其他主机/网络/其他设备上,则不会。
您可以做的另一件事是编写自己的模板加载器,该加载器将使用静态文件API将静态数据加载为模板。这涉及更多,但是无论静态文件如何存储和提供服务,它都应该能够访问静态文件。
如果您选择任何一个选项,您仍然必须要小心。例如,您必须确保将要作为模板包含的静态文件安全地包含到HTML或您在其中使用它们的任何其他上下文中。不会发生转义。
如果您试图优化客户端必须发出的请求数量,则有更好的方法。您最好实现一些可以预处理和最小化静态文件的管道。将任何重要的CSS / JS块包含到HTML中将使客户端无法利用缓存,从而迫使他们一遍又一遍地重新下载相同的静态内容,这可能会对性能产生负面影响。
编辑:由于您只想包含一些动态JavaScript变量,因此根本不是静态文件。您真正想要的是创建一个包含JavaScript代码的模板,而不用将静态文件作为模板处理。没有规则可以说每个JavaScript都必须是静态文件。如果是动态文件,则它不是静态文件。
根据记录,这是XY问题的典型实例。问题X在呈现模板时为JavaScript变量动态分配值。您想出了将静态文件包含在模板中作为潜在解决方案的方法,但后来陷入了问题Y,即您不知道如何在模板中包含静态文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句