Django识别静态地址但不识别媒体

时间:2015-02-04 18:22:29

标签: python django

这是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/识别为有效地址 但是当我尝试Page not found (404)时,它会抛出127.0.0.1:8000/media/

这是我的网址配置

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

2 个答案:

答案 0 :(得分: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}),
        )
  

这样,当DEBUG = True时,您可以从Django提供静态媒体   (当你在本地计算机上时)但你可以让你的网络服务器   当你去生产时,配置服务静态媒体   DEBUG =假

答案 1 :(得分:0)

除了Levi的答案,你可以这样做:

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为True时发挥作用。