问题描述
Django 中MEDIA_URL、MEDIA_ROOT 等都设置正确,输入正确的URL 图片不显示?
相关代码配置
# settings 配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media',
],
},
},
]
MEDIA_ROOT = os.path.join(BASE_DIR,'media').replace('\\','/')
MEDIA_URL = '/media/'
# urls 配置
from django.conf import settings
from django.conf.urls.static import static
from django.views.static import serve
urlpatterns = [
url(r'admin/', admin.site.urls),
url(r'^admin.*$', views.admin),
url(r'^.*$', TemplateView.as_view(template_name="index.html")),
re_path(r'^media/(?P<path>.*)$',serve,{'document_root':settings.MEDIA_ROOT}),
] + static(settings.MEDIA_URL,document_root= settings.MEDIA_ROOT)
结果
返回的url 为 http://127.0.0.1:8000/media/userpro/zj.png,但是图片不显示
尝试将
url(r'^.*$', TemplateView.as_view(template_name="index.html")),
注释掉都,图片正常显示了,这是什么原因啊???
已经找到问题所在,并解决
Django 的url解析顺序为urlpatterns的由上至下的顺序
url(r'^.*$', TemplateView.as_view(template_name="index.html")),
写在前面,会把路由
re_path(r'^media/(?P<path>.*)$',serve,{'document_root':settings.MEDIA_ROOT},name='media'),
屏蔽掉,致使图片无法显示