在后台上传图片
-
先安装Pillow
pip3 install -i https://pypi.douban.com/simple/ Pillow
-
在setting里面进行配置
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace("\\", "/") MEDIA_URL = '/media/'
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' ], }, }, ]
-
模型类设置ImageField字段
#y 表示年份的后两位 Y表示年份的全部 m表示月份 d表示今天的 cover = models.ImageField(verbose_name='封面', upload_to='news/%y/%m/%d')
-
配置主url
from django.conf.urls.static import static from django.conf import settings urlpatterns = [ path('admin/', admin.site.urls), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
-
模板写法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% for article in articles %} <h1>{{ article.title }}</h1> <img src="{{ MEDIA_URL }}{{ article.cover }}" alt=""> {% endfor %} </body> </html>
通过前端上传图片
-
先安装Pillow
pip3 install -i https://pypi.douban.com/simple/ Pillow
-
在setting里面进行配置
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace("\\", "/") MEDIA_URL = '/media/'
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' ], }, }, ]
-
在from表单里面进行配置
<form method="post" action="/upload/" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="pic"/><br> <input type="submit" value="上传"> </form>
-
在view里面进行配置
def upload(request): file = request.FILES.get('pic') media_root = settings.MEDIA_ROOT path = 'news/{}/{}/{}/'.format(datetime.now().year, datetime.now().month, datetime.now().day) full_path = media_root + '/' + path print(full_path) if not os.path.exists(full_path): os.makedirs(full_path) with open(full_path + file.name, 'wb') as pic: for c in file.chunks(): pic.write(c) Article.objects.create(title='ces', cover=path + file.name).save()
-
在主路由进行配置
from django.conf.urls.static import static from django.conf import settings urlpatterns = [ path('admin/', admin.site.urls), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
-
在前端显示上传的图片
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% for article in articles %} <h1>{{ article.title }}</h1> <img src="{{ MEDIA_URL }}{{ article.cover }}" alt=""> {% endfor %} </body> </html> ```