最近在自学Django,使用的是Django 2.0 + Python 3.6 的配置,在写一个上传下载图片应用时遇到了一个问题,就是写好数据库,业务和admin的基本配置时,能看到图片名称,图片却打不开。如图:
在这个界面点击图片的链接是Django提示404 not found的,即是找不到图片路径。
我的admin很常规:
from django.contrib import admin
# Register your models here.
from .models import ImgData
class ImgDataAdmin(admin.ModelAdmin):
list_display = ('name', 'user', 'create_at', 'image')
list_filter = ['user', 'create_at']
search_fields = ['name']
admin.site.register(ImgData, ImgDataAdmin)
后来我找了很多坛子里大神发的解决办法,也尝试了很多,包括在admin里写函数显示之类的。看来看去也就这一条是比较靠谱的,只需要修改url:
from django.conf.urls import url
from django.contrib import admin
from settings import MEDIA_ROOT
from django.views.static import serve
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^media/(?P<path>.*)$', serve, {
"document_root": MEDIA_ROOT}),
]
其中我觉得管用的就是url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}
这一行。于是我把最后一行加到了根url中,提示url无法被import,这个其实是Django学习者经常遇到的问题,因为Django 1.6以后的版本都没法使用url(…)了,用的都是path(…),比如:
urlpatterns = [
path('admin/', admin.site.urls),
]
于是我发动了一下小聪明,把原代码改成了path('media/(<str:path>.*)', serve, {"document_root": MEDIA_ROOT})
,这样我的整个url代码就变成了:
from django.contrib import admin
from django.urls import path, include
from picsite.settings import MEDIA_ROOT
from django.views.static import serve
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', include('login.urls')),
path('updownload/', include('updownload.urls')),
path('data_form/', include(