[Django] 템플릿에서 if 문 적용하기

2022. 3. 20. 19:15·캡스톤/Django
목차
  1. 1. HTML 에서 if 문 으로 헤드 이미지 적용하기
  2. 2. HTML 에서 if 문으로 첨부파일 다운로드 버튼 만들기
  3. 3. 다운로드 버튼에 파일 확장자와 파일 명 보이게 적용하기

1. HTML 에서 if 문 으로 헤드 이미지 적용하기

 

일단 헤드 이미지가 없을 때에도 정상적으로 포스트 목록 페이지가 나오게하기 위해서 blog/templates/blog/post_list.html 을 수정하자.

 

(...생략)
<h1>Blog</h1>
{% for p in post_list %}
<!-- Blog post-->
<div class="card mb-4">
    {% if p.head_image %}
    <a href="#!"><img class="card-img-top" src="{{ p.head_image.url }}"
            alt="{{ p }} head image"/></a> <!-- <img> 태그에서 alt 는 이미지를 보여줄 수 없을 때 이미지 대신 나타나는 텍스트를 의미 -->
    {% endif %}
    (...생략)

 

 

 

정상적으로 포스트 목록 페이지가 출력된다.

 

다음은 만약 헤드 이미지가 없으면 허전하니까 임의의 이미지를 보여주도록 lorem picsum 을 써보자.

 

blog/templates/blog/post_list.html 수정합시다.

 

(...생략)
{% for p in post_list %}
<!-- Blog post-->
<div class="card mb-4">
    {% if p.head_image %} <!-- 헤드 이미지가 있을 경우 -->
    <a href="#!"><img class="card-img-top" src="{{ p.head_image.url }}"
                      alt="{{ p }} head image"/></a>
    {% else %} <!-- 헤드 이미지가 없을 경우 -->
    <img class="card-img-top" src="https://picsum.photos/seed/{{ p.id }}/900/400" alt="random_image">
    {% endif %}
    <div class="card-body">
    (...생략)

 

 

헤드 이미지가 없을 경우에 고정된 이미지를 적용 시키는 것도 이상 없다.

 

근데 상세 페이지에 들어가니까 헤드 이미지가 적용되지 않았다..

 

 

이번엔 blog/templates/blog/post_detail.html 을 수정합시다.

 

(...생략)
<!-- Preview image figure-->
{% if post.head_image %} <!-- 헤드 이미지가 있을 경우 -->
<figure class="mb-4"><img class="img-fluid rounded" src="{{ post.head_image.url }}"
                         alt="{{ post.title }} head_image"/></figure>
{% else %} <!-- 헤드 이미지가 없을 경우 -->
<img class="img-fluid rounded" src="https://picsum.photos/seed/{{ post.id }}/900/400"
     alt="random_image">
{% endif %}
<!-- Post content-->
<section class="mb-5">
(...생략)

 

수정 후 새로고침 갈기기.

 

 

 

 

음음 포스트 상세 페이지에 이미지가 정상적으로 잘 나오는 것을 볼 수 있다.

 

 

2. HTML 에서 if 문으로 첨부파일 다운로드 버튼 만들기

 

이번에는 우리가 앞에서 file_upload 필드를 추가해 파일 첨부 기능을 구현한 걸 방문자가 내려 받을 수 있게 버튼을 만들어보자.

 

일단 부트스트랩 사이트에서 다운로드 이미지를 소스를 복사한 후에 blog/templates/blog/post_detail.html 에 적용시키자.

 

(...생략)
<!-- Post content-->
<section class="mb-5">
    <p class="fs-5 mb-4">{{ post.content }}</p>

    {% if post.file_upload %} <!-- 해당 포스트의 첨부파일이 있는 경우 -->
    <a href="{{ post.file_upload.url }}" class="btn btn-outline-dark" role="button"download>Download</a>
    {% endif %}
    (...생략)

 

 

음 이상 무.

 

근데 그냥 저렇게 'Download' 라고 적혀있으니까 클라이언트가 어떤 첨부파일을 다운받는지 알 수가 없다..

 

이번엔 파일 확장자와 파일 명을 보이게 해봅시다.

 

3. 다운로드 버튼에 파일 확장자와 파일 명 보이게 적용하기

 

이번에는 DB 에 있는 포스트의 첨부파일을 가져오는 것이기 때문에 당연히 blog/models.py 를 수정해야한다.

 

파일 경로를 제외하고 파일 명만 나오게 하기 위해선 get_file_name() 함수를 사용하면 됩니다.

 

from django.db import models
import os

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()

    (...생략)
    
    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]

 

일단 아이콘 이미지를 가져오기 위해서 blog/templates/blog/post_detail.html 에 fontawesome 을 사용하자.

 

<!DOCTYPE html>
{% load static %}
<html lang="ko">
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
        <meta name="description" content="" />
        <meta name="author" content="" />
        <title>{{ post.title }} - Blog</title>
        <!-- Favicon-->
        <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
        <!-- Core theme CSS (includes Bootstrap)-->
        <link href="{% static 'blog/bootstrap/bootstrap.min.css' %}" rel="stylesheet" media="screen" />
        <script src="https://kit.fontawesome.com/cdfefe70b1.js" crossorigin="anonymous"></script> <!-- 파일 확장자에 사용할 아이콘 이미지를 가져오기 위헤 Font awesome 사용 -->
    </head>
    <body>
    
    (...생략)

 

그 다음은 첨부파일 확장자 아이콘으로 사용할 이미지의 소스와 첨부파일 명을 적용시키자.

 

(...생략)
<!-- Post content-->
<section class="mb-5">
    <p class="fs-5 mb-4">{{ post.content }}</p>

    {% if post.file_upload %} <!-- 해당 포스트의 첨부파일이 있는 경우 -->
    <a href="{{ post.file_upload.url }}" class="btn btn-outline-dark" role="button">
        Download:
        {% if post.get_file_ext == 'csv' %} 
          <i class="fa-solid fa-file-csv"></i>
        {% elif post.get_file_ext == 'xlsx' or post.get_file_ext == 'xls' %}
          <i class="fa-solid fa-file-excel"></i>
        {% elif post.get_file_ext == 'docx' or post.get_file_ext == 'doc' %}
          <i class="fa-solid fa-file-word"></i>
        {% else %}
          <i class="fa-solid fa-file"></i>
        {% endif %}
        {{ post.get_file_name }}
    </a>
{% endif %}
(...생략)

 

새로고침 갈기기.

 

 

 

 

음 이상 무.

'캡스톤 > Django' 카테고리의 다른 글

[Django] 미리보기 기능 구현  (0) 2022.03.20
[Django] 포스트 상세 페이지에 부트스트랩 적용  (0) 2022.03.18
[Django] 포스트 목록 페이지에 부트스트랩 적용  (0) 2022.03.18
[Django] CBV로 페이지 만들기  (0) 2022.03.11
[Django] URL 설정  (0) 2022.03.11
  1. 1. HTML 에서 if 문 으로 헤드 이미지 적용하기
  2. 2. HTML 에서 if 문으로 첨부파일 다운로드 버튼 만들기
  3. 3. 다운로드 버튼에 파일 확장자와 파일 명 보이게 적용하기
'캡스톤/Django' 카테고리의 다른 글
  • [Django] 미리보기 기능 구현
  • [Django] 포스트 상세 페이지에 부트스트랩 적용
  • [Django] 포스트 목록 페이지에 부트스트랩 적용
  • [Django] CBV로 페이지 만들기
오도형석
오도형석
형석이의 성장일기오도형석 님의 블로그입니다.
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[Django] 템플릿에서 if 문 적용하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.