def product_list(request):
products = Product.objects.all()
paginator = Paginator(products, 9)
current_page = request.GET.get("page")
if current_page is None:
current_page = 1
page = paginator.page(current_page)
context = {"page": page}
return render(request, "products/product_list.html", context)
@login_required
def product_create(request):
if request.method == "POST":
form = ProductForm(request.POST, request.FILES)
if form.is_valid():
product = form.save(commit=False)
product.author = request.user
product.save()
return redirect("products:detail", product.pk)
else:
form = ProductForm()
context = {"form": form}
return render(request, "products/product_create.html", context)
목록은 게시물의 개수가 많을수록 스크롤을 하는 시간이 길어지기 때문에 paginator를 사용하여 9개씩 나눠서 page를 구성
중고거래의 게시물이기 때문에 사진을 필수로 지정하고 사진은 Form에 데이터를 넣을 때 request.POST
에 request.FILES
도 같이 넣어서 Form을 작성, 이는 html form에서도 enctype="multipart/form-data"
을 사용해야한다.
<form action="{% url 'products:create' %}" method='POST' enctype="multipart/form-data">
...
</form>