포스트 상세 페이지 추가하기

Posted on 2021-08-25 by GKSRUDTN99
Django로 웹사이트 만들기 장고

테스트 코드 수정하기

post 레코드는 setUp()에서 생성하므로 그에 맞게 test_post_detail을 수정한다.

또한, category_card_test를 추가한다.

# blog/tests.py

    def test_post_detail(self):
        self.assertEqual(self.post_001.get_absolute_url(), '/blog/1/')
        response = self.client.get(self.post_001.get_absolute_url())
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content, 'html.parser')
        self.navbar_test(soup)
        self.category_card_test(soup)
        self.assertIn(self.post_001.title, soup.title.text)
        main_area = soup.find('div', id='main-area')
        post_area = main_area.find('div', id='post-area')
        self.assertIn(self.post_001.title, post_area.text)
        self.assertIn(self.post_001.category.name, post_area.text)

        self.assertIn(self.post_001.author.username.upper(), post_area.text)
        main_area = soup.find('div', id='main-area')
        self.assertIn(self.post_001.content, post_area.text)

get_context_data() 메서드로 category 관련 인자 넘기기

# blog/views.py

class PostDetail(DetailView):
    model = Post

    def get_context_data(self, **kwargs):
        context = super(PostDetail, self).get_context_data()
        context['categories'] = Category.objects.all()
        context['no_category_post_count'] = Post.objects.filter(category=None)

        return context

post_detail.html에서 category를 표시하도록 수정하기

<!-- blog/templates/blog/post_detail.html -->
<!-- Post meta content-->
            <div class="text-muted fst-italic mb-2">Posted on {{ post.created_at }} by {{ post.author | upper }}</div>
            {% if post.category %}
                <span class="badge bg-secondary float-end">{{ post.category }}</span>
            {% else %}
                <span class="badge bg-secondary float-end">미분류</span>
            {% endif %}