这是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/
识别为有效地址
但是当我尝试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)),
)
答案 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_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时发挥作用。