为什么{%load static%}是{%get_media_prefix%}的依赖项?

时间:2017-08-13 03:42:34

标签: django django-staticfiles django-media

我已经使用{% get_media_prefix %}很长一段时间了。当他指出这一点时,我正在向某人解释这一点。

为什么我需要声明{% load static %}才能使用它?

它甚至在文档的示例代码here中使用。

在某种程度上,我理解静态文件和媒体文件本质上是相似的。即使我们将它们与nginx + gunicorn结合使用,nginx也会处理它们(我们让其他所有代理,但不是这些)。

但是我们仍然为这些文件定义了单独的MEDIA_URLSTATIC_URL以及MEDIA_ROOTSTATIC_ROOT

那为什么需要声明{% load static %}才能使用{% get_media_prefix %}

提前致谢。

1 个答案:

答案 0 :(得分:1)

要在HTML中使用模板标记,您必须先load包含它的模块。

因此,根据source code of get_media_prefix template tag,此模板标记位于django/templatetags/static.py内。

这就是为什么每次使用它时都必须load在每个HTML模板中。

当然,这适用于每个模板标签的使用。在每个HTML文件的顶部,您加载模板标记,然后使用它们。就像你在python代码中import一个函数一样。

更新:来自Django 1.3 release notes

  

在以前的Django版本中,通常会将MEDIA_ROOT中的静态资源与用户上传的文件一起放置,并在MEDIA_URL处为它们提供服务。引入staticfiles应用程序的部分目的是使静态文件更容易与用户上传的文件分开。静态资产现在应该放在您的应用的static/子目录或STATICFILES_DIRS中列出的其他静态资源目录中,并将在STATIC_URL提供。

正如你所看到的,Django曾经同样对待静态和媒体。由于Django 1.3这个改变了,但模板标签没有。没什么大不了。这只是一个惯例。