오늘 목표
1) 사진 업로드
2) 디자인
구글 드라이브에 있는 저번 시간까지 진행한 likelion_4 압축파일과 img폴더를 다운로드하여 수업을 준비합시다.
저번 시간까지의 내용
로그인하여 접속을 한 뒤에 글과 댓글 그리고 좋아요 기능까지 완성되었습니다.
이제 글만 쓸수있는 프로젝트에서
사진까지 넣을수있게 설정을 해줍니다.
먼저 media파일과 static파일을 사용할 수 있게 pillow를 설치하여 줍시다.
pip install Pillow
pillow를 설치하였다면 static파일을 담을 static폴더를 postapp 아래에 생성하여 줍니다.
이제 settings.py에 static의 경로를 알려주게 추가합니다.
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'postapp', 'static') ]
STATIC_ROOT = os.path.join(BASE_DIR, 'static') |
이제 구글 드라이브에 있던 img폴더안의 파일들을 static폴더에 넣어 줍시다.
파일을 넣어 주었다면 collectstatic !
python manage.py collectstatic
그렇다면 이제 postproject아래에 static라는 폴더가 새로 생기면서 파일들이 모였습니다!!
이제 {% load staticfiles %} 를 상단에 넣어주고 <img src="{% static '파일이름' %}" alt="">을 사용하여 static 파일을 사용할 수 있게 되었습니다.
이제 media파일을 건드려 봅시다
settings.py아래에 media경로를 설정하여 줍시다.
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' |
postproject/urls.py에 들어가서 url을 수정하여 줍시다.
from django.contrib import admin from django.urls import path, include
import postapp.views
from django.conf import settings from django.conf.urls.static import static
urlpatterns = [ path('admin/', admin.site.urls), path('', postapp.views.home, name='home'), path('post/', include('postapp.urls')), path('accounts/', include('accounts.urls')), ]
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT) |
이걸로 media파일을 받을 수 있게 설정을 해주었습니다.
postapp/models.py에 img파일을 받을 수 있게 폼을 만들어 줍시다.
images = models.ImageField(blank=True, upload_to="usr", null=True) |
models를 수정하였으니 makemigrations과 migrate!
python manage.py makemigrations
python manage.py migrate
img파일을 받을수있게 만들어 주었다면 이제 글을 쓸 때 이미지를 추가해줘야 합니다.
<br> <div class="container" enctype="multipart/form-data"> <form action="{% url 'create' %}"> <h4>제목: </h4> <input type="text" name="title"> <br> <br> <h4>본문: </h4> <textarea cols=40 rows=10 name="body"></textarea> <br> <br>
<h4>이미지 :</h4> <input type="file" name="images"> <br> <br>
<input class="btn btn-dark" type="submit" value="제출하기"> </form> </div> |
를 추가하여 폼을 만들고 views.py로 가서 처리를 해줍시다.
postapp/views.py
def create(request): post = Post() post.title = request.GET['title'] post.body = request.GET['body'] post.pub_date = timezone.datetime.now() post.name = User.objects.get(username = request.user.get_username()) post.images = request.GET['images'] post.save() return redirect('/post/' + str(post.id)) |
이제 이미지 파일이 업로드되었을 경우에
화면에 나타나게 하겠숩니다아아 detail.html로 넘어가요
postapp/templates/detail.html
적절한 위치에 해당 코드를 넣습니다.
{% if post.images %} <img width="100%" style="height: 50%" src="{{ post.images.url }}" > {% else %} 이미지가 없습니다. {% endif %} <br> |
포스트 모델에 이미지가 있다면
해당 이미지를 출력하고 이미지가 없다면
이미지가 없다는 문자열을 출력합니다.
'코딩공부 > Python Django' 카테고리의 다른 글
KKU likelion django project (6) (0) | 2020.01.02 |
---|---|
KKU likelion django project (5) 번외 (0) | 2020.01.02 |
KKU likelion django project (4) (0) | 2020.01.02 |
KKU likelion django project (3) (0) | 2020.01.02 |
KKU likelion django project (2) (0) | 2020.01.02 |