티스토리 뷰

INTRO

Python 3.10.0

Django     3.2.8

1. base_log.html을 이용한 persona-erp.html, register.html, password.html 단순화

2. temlates/base/base.html을 이용한 home/notice 통합

 

 

persona 외 mysite/bstest 정리 및 templates/base 통합

- 현 tree 구조 : 빨강 삭제, 파랑 생성, 노랑 수정/이동

.
├── config
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── home
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── migrations
│   ├── models.py
│   ├── templates
│   │   ├── mysite
│   │   │   └── welcome_home.html
│   │   └── persona
│   │       ├── base
│   │       │   ├── base.html
│   │       │   ├── footer.html
│   │       │   ├── sidebar.html
│   │       │   └── topbar.html
│   │       ├── errorforms
│   │       │   ├── 401.html
│   │       │   ├── 404.html
│   │       │   └── 500.html
│   │       ├── index.html
│   │       └── notices
│   │           ├── notice.html
│   │           ├── notice_edit.html
│   │           ├── notice_new.html
│   │           └── notice_view.html
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── manage.py
├── secret.json
├── staticfiles
├── statics
│   ├── assets
│   ├── css
│   ├── img
│   └── js
└── templates
    ├── base
    │   ├── base.html
    │   ├── footer.html
    │   ├── sidebar.html
    │   └── topbar.html
    ├── bstest
    ├── mysite
    └── persona

 

- templates 통일화 : 삭제, 생성, 이동 후 tree

.
├── config
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── home
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── migrations
│   ├── models.py
│   ├── templates

│   │    └── home
│   │       ├── index.html
│   │       └── notices
│   │           ├── notice.html
│   │           ├── notice_edit.html
│   │           ├── notice_new.html
│   │           └── notice_view.html
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── manage.py
├── secret.json
├── staticfiles
├── statics
│   ├── assets
│   ├── css
│   ├── img
│   └── js
└──templates
   ├── base
   │   ├── base.html

   │   ├── base_log.html
   │   ├── footer.html
   │   ├── sidebar.html
   │   └── topbar.html
   ├── errorforms
   │   ├── 401.html
   │   ├── 404.html
   │   └── 500.html
   ├── password.html
   ├── persona-erp.html
   └── register.html

config/settings.py TEMPLATES_DIR 일원화

"""
Django settings for config project.

Generated by 'django-admin startproject' using Django 3.2.9.

For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""

from pathlib import Path
import os, json
from pytz import common_timezones
from django.core.exceptions import ImproperlyConfigured

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
TEMPLATES_DIR     = os.path.join(BASE_DIR, 'templates')

....

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
                TEMPLATES_DIR,
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

 

config/urls.py 수정

from django.contrib import admin
from django.urls import path, include
from home import urls, views
from django.contrib.auth import views as auth_views
from django.views.generic import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', TemplateView.as_view(template_name='persona-erp.html'), name='persona-erp'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
    path('register/', TemplateView.as_view(template_name='register.html'), name='register'),
    path('password/', TemplateView.as_view(template_name='password.html'), name='password'),

    path('home/', include("home.urls")),
]

 

base_log.html 이용하여 persona-erp.html, register.html, password.html 단순화

- templates/base/base_log.html

{% load static %}
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
        <meta name="description" content="" />
        <meta name="author" content="" />
        <title>{% block title %}{{ section.title }}{% endblock %}</title>
        <link href="https://cdn.jsdelivr.net/npm/simple-datatables@latest/dist/style.css" rel="stylesheet" />
        <link href="{% static 'css/styles.css' %}" rel="stylesheet" />
        <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/js/all.min.js" crossorigin="anonymous"></script>
    </head>

    <body class="bg-primary">
        <div id="layoutAuthentication">    
            <div id="layoutAuthentication_content">
                <!-- Topbar -->
                <nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
                    <!-- Navbar Brand-->
                    <a class="navbar-brand ps-3" href="{% url 'persona-erp' %}">PERSONA-ERP</a>
                    <!-- Sidebar Toggle-->
                    <button class="btn btn-link btn-sm order-1 order-lg-0 me-4 me-lg-0" id="sidebarToggle" href="#!"><i class="fas fa-bars"></i></button>
                    <!-- Navbar-->
                </nav>
                <!-- Topbar End-->

                <!-- Sidebar/Main+footer -->
                <div id="layoutSidenav">
                    <!-- 1. Sidebar -->
                    <div id="layoutSidenav_nav">
                        <nav class="sb-sidenav accordion sb-sidenav-dark" id="sidenavAccordion">
                            <div class="sb-sidenav-menu">
                                <nav class="sb-sidenav-menu-nested nav accordion" id="sidenavAccordionPages">
                                    <a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#pagesCollapseAuth" aria-expanded="false" aria-controls="pagesCollapseAuth">
                                        Authentication
                                        <div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
                                    </a>
                                    <div class="collapse" id="pagesCollapseAuth" aria-labelledby="headingOne" data-bs-parent="#sidenavAccordionPages">
                                        <nav class="sb-sidenav-menu-nested nav">
                                            <!-- <a class="nav-link" href="persona-erp.html">Login</a> -->
                                            <a class="nav-link" href="{% url 'register' %}">Register</a>
                                            <a class="nav-link" href="{% url 'password' %}">Forgot Password</a>
                                        </nav>
                                    </div>
                                </nav>
                            </div>
                            <div class="sb-sidenav-footer">
                                <div class="small">Logged in as:</div>
                                <p>{{ user.username }}</p>
                            </div>
                        </nav>
                    </div>
                    <!-- 1. Sidebar End-->

                    <!-- 2. Main_Contents -->
                    <div id="layoutSidenav_content">
                        <main>
                            {% block main %}
                            {% endblock main %}
                        </main>

                        <!-- 2_1. Footer -->
                        <footer class="py-4 bg-light mt-auto">
                            <div class="container-fluid px-4">
                                <div class="d-flex align-items-center justify-content-between small">
                                    <div class="text-muted">Copyright © PERSONA all rights reserved. | SUPPORT @ <a href="https://startbootstrap.com">startbootstrap</a> | THEME : <a href="https://startbootstrap.com/template/sb-admin">SB Admin</a></div>
                                    <div>
                                        <a href="#">Privacy Policy</a>
                                        &middot;
                                        <a href="#">Terms &amp; Conditions</a>
                                    </div>
                                </div>
                            </div>
                        </footer>
                        <!-- 2_1. Footer End-->
                    </div>
                    <!-- 2. Main_Contents End-->
                </div>
                <!-- Sidebar/Main+footer End-->
            </div>
        </div>

        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
        <script src="{% static 'js/scripts.js' %}"></script>
        {% block js %}
        {% endblock js %}
    </body>
</html>

 

 

- templates/persona-erp.html

{% extends 'base/base_log.html' %}
{% block main %}
<div class="container">
    <div class="row justify-content-center">
        <div class="col-lg-5">
            <div class="card shadow-lg border-0 rounded-lg mt-5">
                <div class="card-header"><h3 class="text-center font-weight-light my-4">Login</h3></div>
                <div class="card-body">
                    <form>
                        <div class="form-floating mb-3">
                            <input class="form-control" id="inputEmail" type="email" placeholder="name@example.com" />
                            <label for="inputEmail">Email address</label>
                        </div>
                        <div class="form-floating mb-3">
                            <input class="form-control" id="inputPassword" type="password" placeholder="Password" />
                            <label for="inputPassword">Password</label>
                        </div>
                        <div class="form-check mb-3">
                            <input class="form-check-input" id="inputRememberPassword" type="checkbox" value="" />
                            <label class="form-check-label" for="inputRememberPassword">Remember Password</label>
                        </div>
                        <div class="d-flex align-items-center justify-content-between mt-4 mb-0">
                            <a class="small" href="{% url 'password' %}">Forgot Password?</a>
                            <a class="btn btn-primary" href="{% url 'home:index' %}">Login</a>
                            <!-- <a class="btn btn-primary" type="submit">Login</a> -->
                        </div>
                    </form>
                </div>
                <div class="card-footer text-center py-3">
                    <div class="small"><a href="{% url 'register' %}">Need an account? Sign up!</a></div>
                </div>
            </div>
        </div>
    </div>
</div>
{% endblock main %}

 

 

- templates/register.html

{% extends 'base/base_log.html' %}
{% block main %}
<div class="container">
    <div class="row justify-content-center">
        <div class="col-lg-7">
            <div class="card shadow-lg border-0 rounded-lg mt-5">
                <div class="card-header"><h3 class="text-center font-weight-light my-4">Create Account</h3></div>
                <div class="card-body">
                    <form>
                        <div class="row mb-3">
                            <div class="col-md-6">
                                <div class="form-floating mb-3 mb-md-0">
                                    <input class="form-control" id="inputFirstName" type="text" placeholder="Enter your first name" />
                                    <label for="inputFirstName">First name</label>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="form-floating">
                                    <input class="form-control" id="inputLastName" type="text" placeholder="Enter your last name" />
                                    <label for="inputLastName">Last name</label>
                                </div>
                            </div>
                        </div>
                        <div class="form-floating mb-3">
                            <input class="form-control" id="inputEmail" type="email" placeholder="name@example.com" />
                            <label for="inputEmail">Email address</label>
                        </div>
                        <div class="row mb-3">
                            <div class="col-md-6">
                                <div class="form-floating mb-3 mb-md-0">
                                    <input class="form-control" id="inputPassword" type="password" placeholder="Create a password" />
                                    <label for="inputPassword">Password</label>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="form-floating mb-3 mb-md-0">
                                    <input class="form-control" id="inputPasswordConfirm" type="password" placeholder="Confirm password" />
                                    <label for="inputPasswordConfirm">Confirm Password</label>
                                </div>
                            </div>
                        </div>
                        <div class="mt-4 mb-0">
                            <div class="d-grid"><a class="btn btn-primary btn-block" href="{% url 'register' %}">Create Account</a></div>
                        </div>
                    </form>
                </div>
                <div class="card-footer text-center py-3">
                    <div class="small"><a href="{% url 'persona-erp' %}">Have an account? Go to login</a></div>
                </div>
            </div>
        </div>
    </div>
</div>
{% endblock main %}

 

 

- templates/password.html

{% extends 'base/base_log.html' %}
{% block main %}
<div class="container">
    <div class="row justify-content-center">
        <div class="col-lg-5">
            <div class="card shadow-lg border-0 rounded-lg mt-5">
                <div class="card-header"><h3 class="text-center font-weight-light my-4">Password Recovery</h3></div>
                <div class="card-body">
                    <div class="small mb-3 text-muted">Enter your email address and we will send you a link to reset your password.</div>
                    <form>
                        <div class="form-floating mb-3">
                            <input class="form-control" id="inputEmail" type="email" placeholder="name@example.com" />
                            <label for="inputEmail">Email address</label>
                        </div>
                        <div class="d-flex align-items-center justify-content-between mt-4 mb-0">
                            <a class="small" href="{% url 'home:index' %}">Return to login</a>
                            <a class="btn btn-primary" href="{% url 'password' %}">Reset Password</a>
                        </div>
                    </form>
                </div>
                <div class="card-footer text-center py-3">
                    <div class="small"><a href="{% url 'register' %}">Need an account? Sign up!</a></div>
                </div>
            </div>
        </div>
    </div>
</div>
{% endblock main %}

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함