Если вы не хотите использовать STATIC_URL, но продолжаете использовать тег шаблона url
, вы можете переопределить url()
в своем пользовательском подклассе ManifestStaticFileStorage:
# add kwarg "clean"
def url(self, name, force=False, clean=False):
if clean:
return self._url(self.clean_name, name, force)
return self._url(self.stored_name, name, force)
В то время как stored_name(name)
возвращает хешированную версию clean_name(name)
(та же сигнатура метода) просто заменяет обратную косую черту косой чертой и возвращает простое имя.
Это не проверено, но из кода в django / contrib / staticfiles / storage.py похоже, что это может сработать.
Чтобы активировать свой пользовательский класс FileStorage, вам нужно указать settings.STATICFILES_STORAGE
на него.
В ваших шаблонах, где бы вы ни хотели использовать имя без заголовка, вы должны написать:
{% static 'css/style.css' clean=True %}
Некоторые идеи о том, как static
работает:
@classmethod
def handle_simple(cls, path):
if apps.is_installed('django.contrib.staticfiles'):
from django.contrib.staticfiles.storage import staticfiles_storage
return staticfiles_storage.url(path)
else:
return urljoin(PrefixNode.handle_simple("STATIC_URL"), quote(path))
Таким образом, это означает, что использование {{ STATIC_URL }}
не далеко от того, что делает {% static %}
без приложения staticfiles. Класс хранилища staticfiles добавляет уровень абстракции, проверяет фрагмент URL-адреса и выполняет цитирование URL-адреса.