티스토리 뷰

2020/08/17 - [Django] - localLibrary 저자 & 책 페이지 만들기: 제너릭 뷰와 상세 뷰

 

localLibrary 저자 & 책 페이지 만들기: 제너릭 뷰와 상세 뷰

2020/08/15 - [Django] - localLibrary 홈페이지 만들기 : index 페이지 localLibrary 홈페이지 만들기 : index 페이지 2020/08/13 - [Django] - localLibrary 관리자 페이지 localLibrary 관리자 페이지 2020/08/..

editor752.tistory.com

이전 글에서 licalLibrary 사이트의 잭 페이지 및 상세 페이지를 만들어 보았다. 이를 이용하여 저자 및 저자 상세 페이지를 만들어 보았다.

1. Author 페이지

1-1. url 맵퍼

catalog/urls.py를 아래와 같이 편집한다.

urlpatterns = [
    path('', views.index, name='index'),
    path('books/', views.BookListView.as_view(), name='books'),
    #  path('books/<uuid:pk>', views.BookDetailView.as_view(), name='book-detail'),
    path('books/<int:pk>', views.BookDetailView.as_view(), name='book-detail'),
    path('authors/', views.AuthorListView.as_view(), name='authors'),
]

1-2. 저자 뷰

catalog/views.py를 아래와 같이 편집한다.

class AuthorListView(generic.ListView):
    model = Author

1-3. 저자 리스트 뷰 템플릿 생성히기

/locallibrary/catalog/templates/catalog/author_list.html 경로에 html 파일을 생성하여 아래의 코드를 삽입한다.

{% extends "base_generic.html" %}

{% block content %}
  <h1>Author List</h1>
  {% if author_list %}
  <ul>
    {% for author in author_list %}
      <li>
        <a href="{{ author.get_absolute_url }}">{{ author.first_name }}, {{ author.last_name }}</a> 
        {% if author.date_of_birth %}
            ({{ author.date_of_birth }} ~ 
        {% else %}
            ( 불명 ~ 
        {% endif %}
        {% if author.date_of_death %}
            {{ author.date_of_death }})
        {% else %}
            불명 ) 
        {% endif %}
      </li>
    {% endfor %}
  </ul>
  {% else %}
    <p>There are no Authers.</p>
  {% endif %}       
{% endblock %}

1-4. base_generic.html 편집하기

      {% block sidebar %}
        <ul class="sidebar-nav">
          <li><a href="{% url 'index' %}">Home</a></li>
          <li><a href="{% url 'books' %}">All books</a></li>
          <li><a href="{% url 'authors' %}">All authors</a></li>
        </ul>
      {% endblock %}

이전까지 사이드 메뉴에서 All authers에 비어있는 url을 채운다. catalog/urls.py에 저자 페이지의 이름을 authors로 지정했으므로 {% url 'authors' %}로 주었다.

2. Author 상세 페이지 만들기

2-1. url 맵퍼

catalog/urls.py를 아래와 같이 편집한다.

urlpatterns = [
    path('', views.index, name='index'),
    path('books/', views.BookListView.as_view(), name='books'),
    #  path('books/<uuid:pk>', views.BookDetailView.as_view(), name='book-detail'),
    path('books/<int:pk>', views.BookDetailView.as_view(), name='book-detail'),
    path('authors/', views.AuthorListView.as_view(), name='authors'),
    path('authors/<int:pk>', views.AuthorDetailView.as_view(), name='author-detail'),
]

상세 뷰

catalog/views.py를 아래와 같이 편집한다.

class AuthorDetailView(generic.DetailView):
    model = Author

저자 상세 뷰 템플릿 생성히기

/locallibrary/catalog/templates/catalog/author_detail.html 경로에 html 파일을 생성하여 아래의 코드를 삽입한다.

{% extends "base_generic.html" %}

{% block content %}
  <h1>Auther: {{ author.first_name }}, {{ author.last_name }}</h1>

  <p>
        {% if author.date_of_birth %}
            {{ author.date_of_birth }} ~ 
        {% else %}
            불명  ~ 
        {% endif %}
        {% if author.date_of_death %}
            {{ author.date_of_death }}
        {% else %}
            불명 
        {% endif %}
  </p> 

  <div style="margin-left:20px;margin-top:20px">
    <h4>Books</h4>
    <hr>
    {% for copy in author.book_set.all %}
      <p><a href="{% url 'book-detail' copy.id %}"><strong>  {{ copy.title }} ({{ copy.id }})</strong></a></p>
      <p>{{copy.summary}}</p>
    {% endfor %}

  </div>
{% endblock %}

여기까지 마치면 아래와 같은 저자 페이지와 저자 상세 페이지가 뜨는 것을 확인할 수 있다.

  • 저자 페이지

  • 저자 상세 페이지


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함
05-05 18:55