Django
사용자가 media 를 업로드 할 수 있도록
주씨.
2022. 6. 8. 16:12
728x90
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
MEDIA_ROOT : 사용자가 업로드 한 미디어가 저장되는 경로
MEDIA_URL : 업로드 된 미디어에 접근할 수 있는 경로
urls.py
from django.conf.urls.static import static
from django.conf import settings
...
...
...
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
models.py
class Blog(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
# photo = models.ImageField(blank=True, null=True, upload_to='blog_photo')
photo = models.FileField(default="", blank=True, null=True, upload_to='blog_photo')
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
upload_to='폴더 명' : 사용자가 업로드한 미디어들이 media 폴더 안에 blog_photo(없으면 만들어줌) 안에 넣는다.
forms.py
class BlogModelForm(forms.ModelForm):
class Meta:
model = Blog
fields = '__all__' # Model의 Blog 모델을 전부 입력받을 것이다
# fields = ['title', 'body'] # 특정 필드만 입력받고 싶을 때
form_create.html
<h1>django form을 이용한 새 글 작성 페이지</h1>
<form action="{% url 'modelformcreate' %}" method='POST' enctype="multipart/form-data">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value='새 글 작성하기'>
</form>
enctype="multipart/form-data" : 폼에 파일을 업로드한다면 무조건 추가해줘야 한다
views.py
def modelformcreate(request):
if request.method == 'GET':
form = BlogModelForm()
elif request.method == 'POST' or request.method == 'FILES':
form = BlogModelForm(request.POST, request.FILES)
if form.is_valid(): # 폼 데이터를 자동으로 유효성 검사를 해줌
form.save()
return redirect('home')
return render(request, 'form_create.html', {'form': form})
detail.html
<h1>제목</h1>
{{ blog_detail.title }}
<h2>날짜</h2>
{{ blog_detail.date }}
<h3>본문</h3>
{{ blog_detail.body }}
{% if blog_detail.photo %}
<img src="{{ blog_detail.photo.url }}" alt="">
{% endif %}