페이지 구성 개선하기

Posted on 2021-08-25 by GKSRUDTN99
Django로 웹사이트 만들기 장고

템플릿 파일에서 if문 사용하기

템플릿 파일에서의 if-else문

{% if %}로 시작해서 {% eneif %}로 끝낸다.
{% elif %}{% else %}도 사용할 수 있다.

✔︎ <img>태그에서 alt 속성은, 이미지를 보여줄 수 없을 때 이미지 대신 나타나게 하는 텍스트를 의미한다.

임의의 이미지 표시하기

https://picsum.photos/가로/세로
<img>태그의 src 속성에 위 링크를 입력하면 url로 전달한 크기의 무작위 이미지를 가져온다.
https://picsum.photos/seed/id값/가로/세로
위의 링크를 이용하면 항상 같은 이미지를 가져올 수 있다.

첨부 파일 다운로드 버튼 만들기

<a href="{{ post.file_upload.url }}" class="btn btn-outline-dark" role="button" download>Download</a>

위와 같이 입력하여 다운로드 할 수 있는 버튼을 만들 수 있다.
a 태그 안에 download를 명시하는 것에 주목!

첨부 파일명과 확장자 아이콘 나타내기

Post 모델에 파일명과 확장자를 얻어오는 함수를 정의한다.
os 모듈을 이용하므로 import하자!

# blog/models.py

from django.db import models
import os


class Post(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()

    head_image = models.ImageField(upload_to='blog/images/%Y/%m/%d', blank=True)
    file_upload = models.FileField(upload_to='blog/files/%Y/%m/%d', blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    # author : 추후 작성 예정

    def __str__(self):
        return f'[{self.pk}]{self.title}'

    def get_absolute_url(self):
        return f'/blog/{self.pk}/'

    def get_file_name(self):
        return os.path.basename(self.file_upload.name)

    def get_file_ext(self):
        return self.get_file_name().split('.')[-1]

템플릿 필터 사용하기

truncatewords 혹은 truncatechars를 사용한다.
전자는 문자열을 단어 수 기준으로 자르고, 후자는 문자열을 글자 수 기준으로 자른다.
아래와 같은 방식으로 활용 가능하다.

<p class="card-text">{{ p.content | truncatewords:45 }}</p>