본문 바로가기
Project/pre-print-project

pre-print 프론트 작업 1, 2차 ( Django 템플릿 언어 & html 상속 사용)

by 지식을 쌓는 개구리 2023. 8. 11.

2023 pre-print 개발일지

 

8/7~8/10

 

7개 페이지 프론트 작업

로그인에, 회원가입에, 모델 재설계, 스케줄러 적용, 파일 등록 시스템 적용 등등등..

수많은 기능들을 추가하여 머리가 아프기도 하고 기능만 추가시켜 놔서

페이지가 너무 앙상하기도 하여 가볍게 머리를 식힐 겸 프론트작업을 1차 2차로 나누어 작업하였다.

 

사용한 언어 css, js 

 

  1. 메인 페이지
  2. 프린트 페이지
  3. 결제 페이지
  4. 마이페이지
  5. 결제 내역 페이지
  6. 로그인 페이지
  7. 회원가입 페이지

=> 이와 같이 총 7개의 페이지에 대해서 작업을 완료했다.

 

css가 주가 된 프런트 작업이라 사실상 특별한 깨달음이 있진 않았으나 

장고 템플릿 언어를 통하여 얻은 지식이 있어서 글을 써본다.

 

상속되는 html 페이지

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% block title %}{% endblock %} | pre-print</title>
    <link rel="stylesheet" href="{% static 'css/style.css' %}?after">
    {% block additional_head %}
    {% endblock %}
</head>
<body>
    <div class="navbar">
        <div class="navbar-left">
            <a href="{% url 'main' %}">메인화면</a>
        </div>
        <div class="navbar-center">
            <a href="#">프린트소개</a>
            <a href="#">이용약관</a>
            <a href="#">Q&A</a>
        </div>
        <div class="navbar-right">
            <a href="{% url 'preprint:mypage' %}">마이페이지</a>
            <a href="{% url 'preprint:payment_detail' %}">주문내역</a>
        </div>
    </div>
    <div class="content">
        {% block content %}
        {% endblock %}
    </div>
    <div class="footer">
        <p>전화번호: 123-456-7890</p>
        <p>preprint 사업</p>
    </div>
</body>
</html>

=> 이게 preprint의 모든 페이지에서 보이는 껍데기 html파일이라고 할 수 있다.

그럼 preprint웹 사이트는 총 7개의 페이지로 구성되어 있으니 이 코드를 전부 적용시켜야 할까?

그렇지 않다. 장고 프로젝트이기에 우리는 템플릿 언어를 사용할 수 있다.

 

위 코드를 보면 

        {% block content %}
        {% endblock %}

=> 이 부분을 볼 수 있다.

이게 바로 템플릿 언어이고 html에서 상속을 할 수 있는 방법이다.

 

-상속받은 html페이지-

{% extends 'base.html' %}
{% load static %}
{% block title %}메인페이지{% endblock %}

{% block content %}
<div class="print-main">
  <h1 class="logo">pre-print</h1>
  <form action="/detail/">
    <button type="submit" class="print-start-button">print !</button>
  </form>

  <div class="authentication">
    {% if request.user.is_authenticated %}
    <span>로그인 상태: {{request.user.username}}</span>
    <a href="{% url 'accounts:logout' %}" class="logout-link">로그아웃</a>
    {% else %}
    <span>비로그인 상태</span>
    <a href="{% url 'accounts:login' %}">로그인</a>
    <a href="{% url 'accounts:signup' %}">회원가입</a>
    {% endif %}
  </div>
</div>

{% endblock %}

=> 그럼 이제 상속받은 html 페이지를 보자.

위와 같이 상속받으려는 html의 이름을 가져와 {% extends 'base.html' %}을 시작으로

        {% block content %}
        {% endblock %}

=> 이 블록 안에 모든 요소들이 들어가 있는 것을 볼 수 있다.

이와 같이 템플릿언어를 활용하면 html의 기본 뼈대에 대한 상속이 가능하다.

7페이지에 모두 적용하여 불필요한 중복을 없앴다.

 

head부분의 경우

마찬가지로 head부분의 경우도 자식 html파일에서 부모 html로 코드추가가 가능하다.

 

-base.html-

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% block title %}{% endblock %} | pre-print</title>
    <link rel="stylesheet" href="{% static 'css/style.css' %}?after">
    {% block additional_head %}
    {% endblock %}
</head>

 

-상속받은 html-

{% extends 'base.html' %}
{% load static %}
{% block title %}로그인{% endblock %}
 
{% block additional_head %}
<link rel="stylesheet" href="{% static 'css/account.css' %}?after">
{% endblock %}

=> 다음과 같은 방식으로 head의 정보를 추가한다.