这两种在Django中提供静态文件的方法有何区别?

时间:2019-07-15 23:55:33

标签: django

我有一个Django应用,该应用使用不同的静态文件,例如图像,css文件和js文件。就是说,文档https://docs.djangoproject.com/en/2.2/howto/static-files/显示了两种提供静态文件的方法,而且我也看到开发人员遵循这两种方法。

我目前正在这样做:

#settings.py
STATIC_URL = '/static/'
# whatever.html
{% load static %}
<img src="{% static "my_app/example.jpg" %}" alt="My image">

我所有的图像都和main.css文件放在同一文件夹中。

但是我也看到开发人员遵循文档的第二种方法:

#settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
#urls.py
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

使用第二种方法时,它们将具有一个名为media的不同文件夹,该文件夹与所有主要应用程序位于同一级别。我应该把照片留在那里。

我想知道是否可以采用我正在做的第一种方法(使用{%load static%}),以及两种方法之间的区别。

谢谢!

1 个答案:

答案 0 :(得分:1)

实际上Django不会将两者都视为静态文件。

静态文件图像

<img src="{% static "my_app/example.jpg" %}" alt="My image">

这些是应用程序媒体文件,应该在应用程序范围内使用。它们特别适合在CSS,JS等中使用。

媒体文件图像

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] 

这些媒体文件用于用户上传的内容。它特别处理请求响应周期。

  

注意:   Django使用户上载的媒体与应用程序媒体分离,从而使部署,备份和版本控制更加容易。