【问题标题】:{% load static %} and {% load staticfiles %}: which is preferred?{% load static %} 和 {% load staticfiles %}:哪个是首选?
【发布时间】:2016-03-29 03:19:20
【问题描述】:

我不确定有什么区别,似乎它们都在工作。我用谷歌搜索了一下,似乎它们几乎是一回事。 只是出于好奇,人们在该领域使用哪一个?

我读到了,但仍然不知道什么时候使用,以及该领域的哪个人使用。我的对他们俩都有效。起初我以为它正在加载静态文件夹,但它也适用于静态文件...... -

【问题讨论】:

标签: django django-templates django-staticfiles django-static


【解决方案1】:

目前(Django 1.9 及更早版本),{% load staticfiles %} 从 contrib 应用程序加载 static 模板标签,该应用程序具有比内置 django.core.static 更多的功能。

最重要的区别是staticfiles 可以管理存储在 CDN 上的文件,因为它的解析器可以管理例如哈希。 core.static 仅将 STATIC_URL 附加到静态文件名,如果您正在处理文件(例如添加 md5 哈希以清除版本之间的缓存),这还不够

这种差异是由于管理非本地存储文件并没有专门包含在 Django 的核心包中,但对于许多开发人员来说仍然有用,可以作为官方的 contrib 包来实现。所以如果你开始使用staticfiles,你必须记住在你的模板中使用它。但是,可能会出现一些问题,例如当using Media classes 时,因此决定将这两个模板标签合并为一个并使用不同的行为,无论开发人员在其INSTALLED_APPS 中是否包含django.contrib.staticfiles

Django 1.10 and onwards(也称为see ticket in Django tracker),{% load static %} 将在内部使用staticfiles如果激活(否则保持默认行为),并且 contrib 包中的模板标签将被弃用以避免混淆。

TL;DR

  • 在 Django 1.10 之前staticfiles 加载了一个模板标签,可以管理 static 不能(或不容易)的非本地存储;
  • 来自 Django 1.10contrib.staticfiles 应用仍然存在,但它的模板标签将被删除,只有 {% static %} 模板标签仍然存在;
  • 来自 Django 2.0(我相信):{% load staticfiles %} 已删除。

目前,如果您在 Django 1.10 之前使用相关的 contrib 应用程序(并且您知道为什么要使用它),请使用 staticfiles templatetags,否则请使用 static

【讨论】:

【解决方案2】:

只是 'django/contrib/staticfiles/templatetags/staticfiles.py' 中关于这个主题的一段有趣的代码:

import warnings

from django import template
from django.templatetags.static import (
    do_static as _do_static, static as _static,
)
from django.utils.deprecation import RemovedInDjango30Warning

register = template.Library()


def static(path):
    warnings.warn(
        'django.contrib.staticfiles.templatetags.static() is deprecated in '
        'favor of django.templatetags.static.static().',
        RemovedInDjango30Warning,
        stacklevel=2,
    )
    return _static(path)


@register.tag('static')
def do_static(parser, token):
    warnings.warn(
        '{% load staticfiles %} is deprecated in favor of {% load static %}.',
        RemovedInDjango30Warning,
    )
    return _do_static(parser, token)

所以不敢假设 {% load staticfiles %} 将在 django 3 发布后被删除 :)

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 2020-04-06
    • 2018-01-21
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多