Django CRUDアプローチ(5)-テンプレート継承とアプリケーション分離
Templateの継承
base.htmlの作成
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<title>BLOG</title>
<style>
body {
text-align: center;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
... 생략
</nav>
<div class = "container">
{% block content %}
{% endblock %}
</div>
</body>
</html>
-{%block content%}{%endblock%}各ページの内容が挿入されます
settings.pyで指定
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
'modelproject/templates'
* base.html이 들어있는, 프로젝트 폴더 내의 templates 폴더의 경로를 명시 *
],
'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',
],
},
},
]
各ページでbase。htmlの内容を継承する
* home.html *
{% extends 'base.html' %} << base.html 상속
{% block content %}
<header>
<h1>Blog</h1>
</header>
<h4><a href="{% url 'new' %}">새 글 작성하기</a></h4>
{% for blog in blogs%}
<h3>{{ blog.title }}</h3>
{{ blog.writer}}</br>
{{ blog.summary }}
<a href="{% url 'detail' blog.id %}">...more</a>
<a href="{% url 'delete' blog.id%}">Delete Post</a>
{%endfor %}
{% endblock %}
アプリケーションの分離
アプリケーション別urlの分離
from django.urls import path
from .views import *
app_name = 'blog' << blog 앱에서 쓰이는 url임을 명시
urlpatterns = [
path('<int:id>', detail, name='detail'),
path('new/', new, name='new'),
path('create/', create, name='create'),
path('update/<int:id>', update, name="update"),
path('delete/<int:id>', delete, name="delete"),
]
プロジェクトフォルダのurls。pyで宣言
from django.contrib import admin
from django.urls import path, include # include 작업을 분리해서 앱의 urls.py로 넘겨준다
import blog.views
urlpatterns = [
path('admin/', admin.site.urls),
path('', blog.views.home, name="home"),
path('blog/', include('blog.urls')),
]
-http://127.0.0.1:8000/blog/detail、http://127.0.0.1:8000/blog/updateわあ。等の形態
各ページコードのurlを変更する
{% extends 'base.html' %}
{% block content %}
<h1>Blog Project</h1>
<h4><a href="{% url 'blog:new' %}">New Post</a></h4>
{% for blog in blogs%}
<div>
<h3>{{ blog.title }}</h3>
{{ blog.id }} <br />
{{ blog.writer }} <br />
{{ blog.summary }}
<a href="{% url 'blog:detail' blog.id %}">...more</a>
</div>
{% endfor %}
{% endblock %}
Reference
この問題について(Django CRUDアプローチ(5)-テンプレート継承とアプリケーション分離), 我々は、より多くの情報をここで見つけました https://velog.io/@carmine/Django-CRUD-Practice-5-Template-상속-및-앱-분리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol