强制 Django ManifestStaticFilesStorage 总是 return 带有散列的 url
Force Django ManifestStaticFilesStorage to always return urls with hashes
默认情况下,ManifestStaticFilesStorage
只有 returns url 在 DEBUG=False
时带有散列。我希望我的开发环境尽可能接近生产环境,但在开发过程中我确实需要将 debug 设置为 False。有没有办法告诉 ManifestStaticFilesStorage
总是给我带散列的 url?
您可以重写 ManifestStaticFilesStorage
的 url
方法,以便它始终为您提供带有散列的 url。
from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
from django.conf import settings
class BigBlindManifestStaticFilesStorage(ManifestStaticFilesStorage):
def url(self, name, force=True):
"""
Override .url to use hashed url in development
"""
return super(ManifestStaticFilesStorage, self).url(name, True)
ben432rew的答案很接近,但是 url
的 super
调用必须通过 name
而不是 hashed_name
,除非你添加生成具有该名称的变量的方法的一些其他代码。此外,重要的是您存储的最后一行 class 的 url
return 来自其 super
的值:
from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
from django.conf import settings
class BigBlindManifestStaticFilesStorage(ManifestStaticFilesStorage):
def url(self, name, force=True):
"""
Override .url to use hashed url in development
"""
return super(ManifestStaticFilesStorage, self).url(name, True)
在 Django ticket #28847 中给出了 ManifestStaticFilesStorage
行为的原因,但它不考虑不使用 runserver
命令但使用 runserver
命令完成开发的设置本地网络服务器实例(例如 Apache 或 Nginx)。
感谢 ben432rew 和 Niko 的回答!
默认情况下,ManifestStaticFilesStorage
只有 returns url 在 DEBUG=False
时带有散列。我希望我的开发环境尽可能接近生产环境,但在开发过程中我确实需要将 debug 设置为 False。有没有办法告诉 ManifestStaticFilesStorage
总是给我带散列的 url?
您可以重写 ManifestStaticFilesStorage
的 url
方法,以便它始终为您提供带有散列的 url。
from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
from django.conf import settings
class BigBlindManifestStaticFilesStorage(ManifestStaticFilesStorage):
def url(self, name, force=True):
"""
Override .url to use hashed url in development
"""
return super(ManifestStaticFilesStorage, self).url(name, True)
ben432rew的答案很接近,但是 url
的 super
调用必须通过 name
而不是 hashed_name
,除非你添加生成具有该名称的变量的方法的一些其他代码。此外,重要的是您存储的最后一行 class 的 url
return 来自其 super
的值:
from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
from django.conf import settings
class BigBlindManifestStaticFilesStorage(ManifestStaticFilesStorage):
def url(self, name, force=True):
"""
Override .url to use hashed url in development
"""
return super(ManifestStaticFilesStorage, self).url(name, True)
在 Django ticket #28847 中给出了 ManifestStaticFilesStorage
行为的原因,但它不考虑不使用 runserver
命令但使用 runserver
命令完成开发的设置本地网络服务器实例(例如 Apache 或 Nginx)。
感谢 ben432rew 和 Niko 的回答!