[英]Django recognizes static address but not media
這是我在setting.py
靜態和媒體設置
STATIC_URL = '/static/'
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
在我的項目文件夾結構中, static
和media
文件夾彼此相鄰。
所以當我使用這個html標簽時
<img src="/static/pic.jpg">
或http://127.0.0.1:8000/static/pic.jpg
,它可以工作。
但是<img src="/media/pic.jpg">
和http://127.0.0.1:8000/media/pic.jpg
沒有。
Django如何將127.0.0.1:8000/static/
識別為有效地址,但是當我嘗試127.0.0.1:8000/media/
時會拋出Page not found (404)
?
這是我的網址配置
from django.conf.urls import patterns, include, url
from django.contrib import admin
from mysite.views import *
urlpatterns = patterns('',
url(r'^$', 'mysite.views.home', name='home'),
url(r'^home/', 'mysite.views.gohome'),
url(r'^admin/', include(admin.site.urls)),
)
您需要將此添加到您的urls.py文件中
if settings.DEBUG :
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
)
因此,它應如下所示:
from django.conf.urls import patterns, include, url
from django.contrib import admin
from mysite.views import *
urlpatterns = patterns('',
url(r'^$', 'mysite.views.home', name='home'),
url(r'^home/', 'mysite.views.gohome'),
url(r'^admin/', include(admin.site.urls)),
)
if settings.DEBUG :
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
)
這樣,當DEBUG = True(在本地計算機上)時,您可以從Django提供靜態媒體,但是當您進入生產環境且DEBUG = False時,可以讓Web服務器配置提供靜態媒體。
除了Levi的答案,您還可以執行以下操作:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
...
urlpatterns += staticfiles_urlpatterns()
您需要在設置中設置STATICFILES_DIRS
。 https://docs.djangoproject.com/en/1.7/ref/contrib/staticfiles/#django.contrib.staticfiles.urls.staticfiles_urlpatterns
另一種選擇是:
from django.conf import settings
from django.conf.urls.static import static
...
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我最喜歡這最后一個,因為很明顯會發生什么。
兩者僅在DEBUG為True時才起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.