在线一区二区三区高清视频,国产精品妇女一二三区,美女被遭强高潮网站在线播放,实拍各种胸走光见奶头

Django下MEDIA_ROOT, MEDIA_URL, STATIC_ROOT, STATIC_URL詳解

時間:2022-01-20 16:22:02 類型:python
字號:    

  Django中settings中的四個設(shè)置參數(shù)的一些故事:

  MEDIA_ROOT, MEDIA_URL, STATIC_ROOT, STATIC_URL

  1、MEDIA_ROOT與MEDIA_URL

  事實上MEDIA_ROOT和MEDIA_URL代表的是用戶上傳后的文件一般保存的地方。我的理解是,可變文件的文件夾。

  與這兩個參數(shù)有聯(lián)系的,是在Django的FileField和ImageField這樣的Model類中,有upload_to參數(shù)可選。當(dāng)upload_to設(shè)置相關(guān)的地址后,如:upload_to="username";文件上傳后將自動保存到 os.path.join(MEDIA_ROOT, upload_to)。

  而MEDIA_URL,,則代表用戶通過URL來訪問這個本地地址的URL。如本機http://127.0.0.1/, MEDIA_URL設(shè)置為"/site_media/",那么通過http://127.0.0.1/site_media/*** 就可以訪問相關(guān)的上傳圖片或者其他資源。

  2、STATIC_ROOT與STATIC_URL

  STATIC_ROOT和STATIC_URL則是網(wǎng)站中,用于網(wǎng)站顯示的靜態(tài)圖片、CSS、JS等文件的保存地址。我的理解是,運行中不會再變文件的文件夾(即不會刪除或者新增)

  2.1 STATIC_URL

  同MEDIA_URL類似;STATIC_URL為"/static/"時候,通過http://127.0.0.1/static/***就可以訪問相關(guān)的靜態(tài)文件了。

  2.2 STATIC_ROOT

  STATIC_ROOT是一個比較特殊的文件夾。這是區(qū)別Django的開發(fā)模式和部署模式下最大的地方了。

  通常我們在開發(fā)模式下,可以在我們所在的project下建立相應(yīng)的app, 然后每個app下都建立相應(yīng)的static文件夾。在開發(fā)模式下(Debug=True),Django將為我們自動查找這些靜態(tài)文件(每個app)并在網(wǎng)頁上顯示出來。然而,在部署模式下,Django認(rèn)為這些工作交由web服務(wù)器來運行會更有效率。

  因此,在部署時,我們需要運行一下python manage.py collectstatic 這個命令。這個命令將會把每個app里的static目錄下的文件copy到STATIC_ROOT這個文件夾下,這時候如果在部署模式下(Debug=False),網(wǎng)頁中相關(guān)的,如: http://127.0.0.1/static/*** 的訪問,將不會訪問Django下各個App中的static,而是STATIC_ROOT中所指定的文件夾。

  3、Debug=False后,為何無法訪問圖片和js等文件了?

  其實這個問題,是在于web服務(wù)器沒有對STATIC_ROOT以及MEDIA_ROOT這兩個文件夾進(jìn)行映射所導(dǎo)致的。

  以apache為例,假定:

  STATIC_ROOT="/home/user/static/"

  STATIC_URL="/static/"

  MEDIA_ROOT="/home/user/media/"

  MEDIA_URL="/media/"

  那么可以在apache的配置文件中,增加以下:

<Location "/static/">
Order deny,allow
Allow from all
Satisfy Any
</Location>
Alias /static/ "/home/user/static"
<Location "/media/">
Order deny,allow
Allow from all
Satisfy Any
</Location>
Alias /media/ "/home/user/media/"

  4、開發(fā)模式中,MEDIA_ROOT和MEDIA_URL問題

  在開發(fā)模式下,我們有時候會發(fā)現(xiàn)http://127.0.0.1/media/下無法訪問我們上傳的文件。在Django最新的版本中,可以在url中增加相關(guān)的映射來解決,在你的urlpatterns后面增加:

 

  配合下面的方式使用才能訪問到文件,大家看到+static()的方式也相當(dāng)于是通過static靜態(tài)文件訪問的形式來訪問文件。那么就可以直接配置在settings中

 media_root = os.path.join(settings.BASE_DIR,settings.MEDIA_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root = media_root)


<