2015-02-04 29 views
0

這是setting.pyDjango的識別靜態地址而不是媒體

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)), 
) 

回答

1

您需要添加到您的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}), 
     ) 

有了這個,你可以從Django服務靜態媒體時DEBUG =真 (當你在本地計算機上),但你可以讓你的Web服務器 配置服務靜態媒體,當你去生產和 DEBUG =假

+0

謝謝。它使用DEBUG = True來完成這項工作。但如何使它在服務器上工作? –

+0

@AlexJolig取決於您將在生產環境中使用的應用程序服務器(gunicorn/apache),還是服務器將靜態/媒體文件作爲nginx提供。 – levi

+0

我在本地和服務器上使用nginx –

0

或者李維斯的答案,你可以這樣做:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

... 
urlpatterns += staticfiles_urlpatterns() 

您需要在您的設置中設置STATICFILES_DIRShttps://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爲真時才起作用。