인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

이재하  ERICA 컴퓨터전공님의 프로필 이미지
이재하 ERICA 컴퓨터전공

작성한 질문수

Do It! 장고+부트스트랩: 파이썬 웹개발의 정석

포스트 목록 페이지 수정하기 2

Categories의 항목을 불러오지 못합니다.

작성

·

241

0

강의를 따라서 test도 성공했고, category 뱃지도 출력이 됩니다. 하지만 카테고리 블록에서 미분류를 제외한 나머지, programming과 문화&예술이 출력되지 않습니다. 제가 추정컨데, view.py에서 def get_context_data를 인식하지 못 하는 것으로 보입니다. 왜냐하면, 미분류가 출력이 되지만 미분류의 개수('no_category_post_count')는 출력이 되지 않기 때문입니다. 오랫동안 코드를 비교하며 고민했으나 도저히 정답이 나오지 않습니다. 아래에 관련 코드를 첨부합니다.

p.s. 다음 강의를 들어보니 post_detail 페이지에서는 search와 category가 잘 출력되는 반면, post_list 페이지에서는 search와 category가 존재조차 하지 않습니다.

 

 

view.py

from django.views.generic import ListView, DetailView
from .models import Post, Category

class PostList(ListView):
model = Post
ordering = '-pk'

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

class PostDetail(DetailView):
model = Post

base.html

<!DOCTYPE html>
{% load static %}
<html>
<head>
<title>{% block head_title %}Blog | 지수나라!{% endblock %}</title>
<link href="{% static 'blog/bootstrap/bootstrap.min.css'%}" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css"
integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
<script src="https://kit.fontawesome.com/1c333bfcc0.js" crossorigin="anonymous"></script>
</head>

<body>
{% include 'blog/navbar.html' %}


<div class="container">
<div class="row my-3">
<div class="col-md-8 col-lg-9" id="main-area">
{% block main_area %}
{% endblock %}
</div>
<div class="col-md-4 col-lg-3">
<!-- Search Widget -->
<div class="card my-4">
<h5 class="card-header">Search</h5>
<div class="card-body">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search for...">
<span class="input-group-append">
<button class="btn btn-secondary" type="button">Go!</button>
</span>
</div>
</div>
</div>
<!-- Categories Widget -->
<div class="card my-4" id="categories-card">
<h5 class="card-header">Categories</h5>
<div class="card-body">
<div class="row">
<ul>
{% for category in categories %}
<li>
<a href="#">{{ category.name }} ({{category.post_set.count}})</a>
</li>
{% endfor %}
<li>
<a href="#">미분류 ({{no_category_post_count}})</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>

{% include 'blog/footer.html' %}

<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"
integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns"
crossorigin="anonymous"></script>

</body>

</html>

models.py

from django.db import models
from django.contrib.auth.models import User
import os

class Category(models.Model):
name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(max_length=50, unique=True, allow_unicode=True)

def __str__(self):
return self.name

class Meta:
verbose_name_plural = 'Categories'

class Post(models.Model):
title = models.CharField(max_length=50)
hook_text = models.CharField(max_length=100, blank=True)
content = models.TextField()
head_image = models.ImageField(upload_to='blog/images/%Y/%m/%d/', blank=True)
file_upload = models.FileField(upload_to='blog/files/%Y/%m/%d/', blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

author = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
category = models.ForeignKey(Category, null=True, blank=True, on_delete=models.SET_NULL)

def __str__(self):
return f'[{self.pk}] {self.title} :: {self.author}'

def get_absolute_url(self):
return f'/blog/{self.pk}/'

def get_file_name(self):
return os.path.basename(self.file_upload.name)

def get_file_ext(self):
return self.get_file_name().split('.')[-1]

답변 1

0

SungYong Lee님의 프로필 이미지
SungYong Lee
지식공유자

post_list.html도 보여주시겠어요?

이재하  ERICA 컴퓨터전공님의 프로필 이미지
이재하 ERICA 컴퓨터전공

작성한 질문수

질문하기