我已经使用{% get_media_prefix %}
很长一段时间了。当他指出这一点时,我正在向某人解释这一点。
为什么我需要声明{% load static %}
才能使用它?
它甚至在文档的示例代码here中使用。
在某种程度上,我理解静态文件和媒体文件本质上是相似的。即使我们将它们与nginx + gunicorn结合使用,nginx也会处理它们(我们让其他所有代理,但不是这些)。
但是我们仍然为这些文件定义了单独的MEDIA_URL
和STATIC_URL
以及MEDIA_ROOT
和STATIC_ROOT
。
那为什么需要声明{% load static %}
才能使用{% get_media_prefix %}
?
提前致谢。
答案 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这个改变了,但模板标签没有。没什么大不了。这只是一个惯例。