当我学习Django如何处理静态文件时,我看到了两种不同的提供静态文件的方式,同时仍然允许可移植性。
-
一种方法是在模板中执行以下操作:
{% load static from staticfiles %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
-
另一种方法是加载静态文件的上下文处理器,然后使用
<img src="{{ STATIC_URL }}images/hi.jpg" alt="Hi!" />
在Django文档中有说明。使用此方法时,我基于
更改STATIC_URL
if DEBUG: STATIC_URL = 'localhost' else: STATIC_URL = 'some_static_server_url'
哪个被认为是更好的实践?一种方法比另一种方法好吗?例如,这个问题有两种方法作为答案,而这个问题有第二种方法。如果你有什么见解,我会很有帮助的。
当使用Django默认的StaticFilesStorage
时,这两个方法本质上是相同的。这两种方法都忽略了任何实际的文件。这两种方法只是将STATIC_URL
设置和实际文件路径连接在一起。
在使用自定义文件存储后端时可能会有所不同。如果你需要灵活性,例如,如果一些文件是用不同的静态url存储的,你可以覆盖后端的url
方法,根据文件的实际位置返回一个url。使用STATIC_URL
设置是不可能的。但是,这种情况非常罕见:大多数服务器将其静态文件存储在同一服务器或第三方服务的单个位置。
当您定义STATIC_URL
设置并且静态文件与网站位于同一域时,最好将其定义为根相对url,例如'/static/'
。这增加了可移植性,并且不太可能导致错误。您将不再需要担心是否已经覆盖了可以部署代码的所有系统。