Q&A

책을 따라하다가 막히는 부분이 있나요?
질문을 남겨주세요.

templates 에서 post, categories, post_list 이런 거는 views의 어디서 가져오는 건가요?

2 years, 11 months ago

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


class PostList(ListView):
model = Post
# template_name = 'blog/post_list.html'
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
{% if post_list.exists %}
{% for category in categories %}
{{ post.title }}

views 파일과 연결된 거 같은데 어떤 규칙으로 templates에서 위와 같이 변수명으로 들어가는지 모르겠습니다





edit11020211
edit11020211   2 years, 11 months ago

ListView 를 상속해서 만든 PostList 같은경우

해당 View 랑 연결되는 디폴트 템플릿(html) 은 모델명_list.html 이 됩니다.

위와같은경우에 model=Post 니까 디폴트 템플릿은 post_list.html 이 됩니다.


템플릿에서도 디폴트 템플릿( ex. post_list.html) 을 해줬듯이

 CBV 방식으로 사이트를 빌드할시  html 템플릿에서 레코드객체를 디폴트 값( 장고가 정한 규칙  )

으로 찍어낼 수 있는데

ListView 같은경우에는 모델명_list 로 해당 {{ }} 중괄호 안쪽 또는 {% if ~~ %}에 집어넣어서 html에 찍어 내 줄 수 있습니다.

그러니까 캡쳐하신 부분에서 model = Post 라고 했기 때문에

{% if post_list.exists %}  이렇게 쓸 수 있는 것이지요..


post_list 라는 이름으로 표현하고 싶지 않다면


class PostList(ListView):

    moel = Post    

    context_object_name = 'my_post_list' 


이런식으로 context_object_name 의 속성값으로 원하시는 이름을 써주시면 

post_list.html 에서는


{% if my_post_list %}  이렇게 바꿀 수 있습니다.








Updated: Dec. 12, 2021, 5:28 p.m.

edit11020211
edit11020211   2 years, 11 months ago

get_context_data 메소드의


context['categories'] = Category.objects.all()


에서


'categories'



{% for categor in categories %}


여기의 categories 에요


get_context_data가 딕셔너리형태의 자료를 담아서


해당 html 템플릿에서 '키' 의값을 출력시켜준다면


'값' 이 html 에 나타나게 되는 것이지요.


그러니까 캡쳐하신 html 에서

{% for categor in categories %}

에서

categories 는 결국

Category.objects.all() 값을 가져오게 되는 것이고

카테고리객체 전체의 쿼리셋을 for 문을 돌려서

카테고리 하나씩 뽑아내는 것이구요


Updated: Dec. 14, 2021, 10:47 p.m.

Leave a Comment:
목록보기
Search
  • 자유게시판
  • Q&A