强制 Django ManifestStaticFilesStorage 总是 return 带有散列的 url

Force Django ManifestStaticFilesStorage to always return urls with hashes

默认情况下,ManifestStaticFilesStorage 只有 returns url 在 DEBUG=False 时带有散列。我希望我的开发环境尽可能接近生产环境,但在开发过程中我确实需要将 debug 设置为 False。有没有办法告诉 ManifestStaticFilesStorage 总是给我带散列的 url?

您可以重写 ManifestStaticFilesStorageurl 方法,以便它始终为您提供带有散列的 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的答案很接近,但是 urlsuper 调用必须通过 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 的回答!