이번 포스팅에서는 board앱으로 이동해서 게시판을 만들어보도록 하겠습니다.
먼저 user 앱에서 사용했던 base.html파일을 복사하여 board/templates/board에 붙여넣도록 하겠습니다. 이 후 board_list.html파일 생성하여 base.html상속받아 다음과 같이 작성해보도록 하겠습니다.
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 32 33
| {% raw %} {% extends "./base.html" %}
{% block contents %} <div class="row mt-5"> <div class="col-12"> <table class="table table-light"> <thead class="thead-light"> <tr> <th>#</th> <th>제목</th> <th>아이디</th> <th>일시</th> </tr> </thead> <tbody class="text-dark"> <tr> <th>1</th> <th>제목 텍스트입니다.</th> <th>user</th> <th>2019-09-14 17:48:00</th> </tr> </tbody> </table> </div> </div> <div class="row"> <div class="col-12"> <button class="btn btn-primary">글쓰기</button> </div> </div> {% endblock %} {% endraw %}
|
작성이 완료되었다면 템플릿을 연결하기 위해 먼저 community/urls.py 로 이동하여 다음과 같이 path를 추가해주도록 합니다.
1 2 3 4 5 6 7 8 9 10 11
| from django.contrib import admin from django.urls import path, include from user.views import home
urlpatterns = [ path('admin/', admin.site.urls), path('user/', include('user.urls')), path('board/', include('board.urls')), path('', home)
]
|
현재 board에 urls파일이 없기 때문에 오류가 날 것입니다. board/에 urls.py를 만들고 다음과 같이 작성해줍니다.
1 2 3 4 5 6
| from django.urls import path, include from . import views
urlpatterns = [ path('list/', views.board_list), ]
|
또 아직 views.py에 board_list라는 함수가 없으므로 오류가 날 테니 가서 작성해주도록 합니다.
1 2 3 4
| from django.shortcuts import render
def board_list(request): return render(request, 'board/board_list.html')
|
간단하게 연결만 시킨 뒤 한번 확인해보도록 하겠습니다.
http://127.0.0.1:8000/board/list/ 로이동하여 확인해보면
위와 같이 게시판 형태를 갖추게 되었으니 이제 board의 모델을 만들어보도록 하겠습니다. board/models.py로 이동하여 다음과 같이 작성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| from django.db import models
class Board(models.Model): title = models.CharField(max_length=200, verbose_name='제목') contents = models.TextField(verbose_name='내용') writer = models.ForeignKey('user.User', on_delete=models.CASCADE, verbose_name='작성자') registered_dttm = models.DateTimeField(auto_now_add=True, verbose_name='등록시간')
def __str__(self): return self.title
class Meta: db_table = 'Community_board' verbose_name = '커뮤니티 게시글' verbose_name_plural = '커뮤니티 게시글'
|
모델을 작성하였으니 이제 데이터베이스에 적용시키기 위해 makemigrations과 migrate를 해주도록 하겠습니다.
이제 views.py로 이동하여 데이터베이스에 있는 게시글들을 모두 불러오도록 다음과 같이 작성해줍니다.
1 2 3 4 5 6 7 8
| from django.shortcuts import render from .models import Board
def board_list(request): boards = Board.objects.all().order_by('-id')
return render(request, 'board/board_list.html', {'boards' : boards})
|
이제 다시 확인해 보면
위와 같이 아직 데이터베이스에 글이 없기 때문에 QuerySet[] 라고 출력되게 됩니다. 그럼 데이터베이스에서 글을 하나 작성해보도록 하겠습니다.
우선 board/admin.py로 이동하여 다음과 같이 작성해줍니다.
1 2 3 4 5 6 7 8
| from django.contrib import admin from .models import Board
class BoardAdmin(admin.ModelAdmin): list_display = ('title', ) admin.site.register(Board, BoardAdmin)
|
이제 장고admin으로 이동하여 테스트 글을 하나 작성해보도록 하겠습니다. 위와 같이 작성을 하고 다시한변 리스트를 확인해보면
위에 데이터가 추가된 것을 확인할 수 있습니다. 이제 이 데이터를 표에 집어넣기 위해 board_list.html 로 이동하여 다음과 같이 수정해주도록 하겠습니다.
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 32 33 34 35
| {% raw %} {% extends "./base.html" %}
{% block contents %} <div class="row mt-5"> <div class="col-12"> <table class="table table-light"> <thead class="thead-light"> <tr> <th>#</th> <th>제목</th> <th>아이디</th> <th>일시</th> </tr> </thead> <tbody class="text-dark"> {% for board in boards %} <tr> <th>{{ board.id }}</th> <th>{{ board.title }}</th> <th>{{ board.writer }}</th> <th>{{ board.registered_dttm }}</th> </tr> {% endfor %} </tbody> </table> </div> </div> <div class="row"> <div class="col-12"> <button class="btn btn-primary">글쓰기</button> </div> </div> {% endblock %} {% endraw %}
|
위와 같이 수정해준뒤 다시 확인해보도록 하면
이렇게 정상적으로 출력이 되는 것을 확인할 수 있습니다. 이번 포스팅에서는 여기까지 게시판의 글 목록을 출력하는 것 까지 완료하였고 다음 포스팅에서 글쓰기 기능과 글 상세보기 기능을 추가해보도록 하겠습니다.