-
Django 초간단 게시판 5. templatesPython/초간단 장고 Django 2021. 5. 28. 02:31반응형
폴더 경로가 board/templates/board/*.html 이러 하다.
board 아래에 또 board가 있는 이유는 네임스페이스로 사용하기 위해서이다.
다른 앱에 이름이 같은 파일이 있다면 장고가 오동작할 수 있다.
네임 스페이스가 이를 막아준다.장고의 클래스 뷰를 이용하면 자동으로 파일명이 정해진다.
물론 별도의 파일명을 지정할 수 있지만...
한 줄이라도 더 줄이기 위해 디폴트 값으로..article_detail.html
디테일 뷰의 템플릿이다.
클래스 뷰에서 속성으로 지정되었던 모델의 내용이
object 객체에 담겨 전달된다.
객체의 이름(object)은 바꿀 수 있지만 한 줄이라도 줄이자...{{}} 여기에 변수를 담는다.
<!--board/templates/board/article_detail.html--> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>{{object.title}}</title> </head> <body> <p>title: {{object.title}}</p> <p>author: {{object.author}}</p> <p>content: {{object.content}}</p> <p>created_at: {{object.created_at|date:'Y-m-d, H:i'}}</p> <p>modified_at: {{object.modified_at|date:'Y-m-d, H:i'}}</p> <div> <a href="{% url 'update' object.id %}">수정</a> <a href="{% url 'delete' object.id %}">삭제</a> <a href="{% url 'index' %}">목록</a> </div> </body> </html>
|date:'Y-m-d, H:i' 는 템플릿 필터다.
https://ssungkang.tistory.comarticle_list.html
{% %} 에는 조건문 반복문 등을 담는다.
object_list에 리스트가 담겨 있다.
<!--board/templates/board/article_list.html--> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% if object_list %} <ul> {% for each in object_list %} <li> {{each.id}} [{{each.author}}] <a href="{% url 'detail' each.id%}">{{ each.title }}</a> [{{each.created_at|date:'Y-m-d, H:i'}}] </li> {% endfor %} </ul> {% else %} <p>목록이 비었습니다.</p> {% endif %} {% if is_paginated %} <ul> {% if page_obj.has_previous %} <li><a href="?page={{ page_obj.previous_page_number }}">«</a></li> {% else %} <li><span>«</span></li> {% endif %} {% for i in paginator.page_range %} {% if page_obj.number == i %} <li><span>{{ i }} <span>(current)</span></span></li> {% else %} <li><a href="?page={{ i }}">{{ i }}</a></li> {% endif %} {% endfor %} {% if page_obj.has_next %} <li><a href="?page={{ page_obj.next_page_number }}">»</a></li> {% else %} <li><span>»</span></li> {% endif %} </ul> {% endif %} <div><a href="{% url 'create' %}">글 등록</a></div> </body> </html>
주소를 만들 때는 {% uri 'urls.py에서 지정한 별명' 전달값 %} 이다.
전달할 게 없으면 전달값은 생략 가능.article_form.html
생성과 수정은 같은 폼을 사용한다.
<!--board/templates/board/article_form.html--> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="post"> {% csrf_token %} {{ form.as_p }} <input type="submit" value="저장"> </form> </body> </html>
{% csrf_token %}는 CSRF(Cross Site Request Forgery) 공격을 막기 위한 장치이다.
장고는 폼도 자동으로 만들어준다. = form.as_p, form.as_table
<p></p>, 또는 <table></table>을 이용...article_confirm_delete.html
특별한 것은 없다.
<!--board/templates/board/article_confirm_delete.html--> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="POST"> {%csrf_token%} {{object}}를 삭제할까요? <input type="submit" value="삭제"> </form> </body> </html>
------------------
초간단이기 때문에
디자인은 다루지 않습니다.익명 게시판 정도 완성했네요.
아무나 글을 수정하고 지울 수 있는 문제를 해결해야 하지만....읽어주셔서 감사합니다.
반응형