# views.py
def update(request):
return render(request, 'posts/create.html')
# urls.py
path('<int:post_id>/update/', views.update, name='update'), 추가
# views.py
def update(request,post_id):
post = get_object_or_404(Post, id=post_id)
if request.method == 'POST':
post_form = PostForm(request.POST, instance=post)
if post_form.is_valid():
post_form.save()
return redirect('posts:list')
else:
post_form = PostForm(instance=post)
return render(request, 'posts/create.html', {'post_form':post_form})
이미지 업로드
pip install pillow
# models.py
from django.db import models
# Create your models here.
class Post(models.Model):
image = models.ImageField(blank=True)
# bash
./manage.py makemigrations
./manage.py migrate
<!--create.html-->
<form action="" method="post" enctype="multipart/form-data">
# views.py
def create(request):
if request.method == 'POST':
post_form = PostForm(request.POST, request.FILES) # 추가
if post_form.is_valid():
post_form.save()
return redirect('posts:list')
else:
post_form = PostForm()
return render(request, 'posts/create.html', {'post_form':post_form})
# settings.py
MEDIA_URL='/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 전체 urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static # 추가
from django.conf import settings # 추가
urlpatterns = [
path('admin/', admin.site.urls),
path('posts/', include('posts.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # 추가
def create(request):
if request.method == 'POST':
post_form = PostForm(request.POST, request.FILES, instance=post) # 추가
if post_form.is_valid():
post_form.save()
return redirect('posts:list')
# bash
pip install pilkit django-imagekit
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap4',
'posts',
'imagekit', #추가
]
# models.py
from django.db import models
from imagekit.models import ProcessedImageField # 추가
from imagekit.processors import ResizeToFill # 추가
# Create your models here.
class Post(models.Model):
content = models.TextField()
# image = models.ImageField(blank=True)
image = ProcessedImageField( # 추가
upload='posts.image', # 저장 위치
processors=[ResizeToFill(600,600)], # 처리할 작업 목록
format='JPEG', # 저장 포맷
options={'quality':90}, # 옵션
)
# bash
./manage.py makemigrations
./manage.py migrate
# models.py
from django.db import models
from imagekit.models import ProcessedImageField
from imagekit.processors import ResizeToFill
def post_image_path(instance, filename):
return 'posts/{}/{}.jpg'.format(instance.content, filename)
# Create your models here.
class Post(models.Model):
content = models.TextField()
# image = models.ImageField(blank=True)
image = ProcessedImageField(
upload_to=post_image_path, # 저장 위치
processors=[ResizeToFill(600,600)], # 처리할 작업 목록
format='JPEG', # 저장 포맷
options={'quality':90}, # 옵션
)