簡體   English   中英

Django中如何添加media_root和media_url

[英]How to add media_root and media_url in Django

我正在使用 Django 3,我已經嘗試了 inte.net 上可用的所有解決方案,但沒有一個對我有用。 當我設置 DEBUG=False 時,我無法在 HTML 頁面上顯示圖像。 這是我的設置

-root_app
--main_app
---settings.py
---asgi.py
---urls.py
---wsgi.py
--sub_app
---admin.py
---urls.py
---views.py
---static
----style.css
---templates
----home.html
---media
----images

settings.py 中的媒體路徑

MEDIA_ROOT = os.path.join(BASE_DIR,'sub_app','media') 
MEDIA_URL = '/media/'

在這里我做了什么來解決它

  • 添加 context_processor django.template.context_processors.media'
  • 在 sub_app 的urls.py的 url_patterns 中添加+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  • 我將 static 存儲更改為STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage' ,否則我會收到 500 錯誤。 檢查此評論

但是,我仍然無法在home.html頁面顯示圖像。 當我使用檢查元素單擊圖像源時,我得到了這個/media/images/img.png

這些設置解決了媒體路徑問題

MEDIA_ROOT = os.path.join(BASE_DIR, 'sub_app','media') 
MEDIA_URL = '/media/'

Static 路徑

STATIC_ROOT = os.path.join(BASE_DIR, 'sub_app','static')
STATIC_URL = '/static/

在 main_app 的 urls.py 中添加 re_path 行

from django.conf.urls.static import static
from django.views.static import serve

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('sub_app.urls')),
    re_path(r'^media/(?P<path>.*)$', serve, kwargs={'document_root': settings.MEDIA_ROOT})
]

改變這個

MEDIA_ROOT = os.path.join(BASE_DIR,'sub_app','media') 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

settings.py 中使用

{{MEDIA_URL}}images/image.png

在你的模板中。

對 Abhishek 博士的回答的編輯:是的,您需要MEDIA_ROOT設置,但您還需要將其 append 放入STATICFILES_DIRS列表中,它看起來像這樣:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

STATICFILES_DIRS = [
    # ...
    os.path.join(BASE_DIR, 'media'),
]

加載圖像時,使用如下軟編碼路徑:

{% load static %}
<!-- remember to change the file name/type! -->
<img src="{% static 'images/image.jpg' %}" alt="Image">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM