簡體   English   中英

Django識別靜態地址,但不能識別媒體

[英]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')

在我的項目文件夾結構中, staticmedia文件夾彼此相鄰。

所以當我使用這個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.

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