2014-11-05 3 views
0

나는 장고에서 간단한 블로그 앱을 만들고 있는데 사이드 바에 5 개의 최근 게시물을 동적으로 생성하는 방법을 알아 내려고하는 데 어려움을 겪고있다. 각 뷰는 클래스 기반이며 일반 템플릿을 확장하고 각 뷰는 올바른 방법이라고 생각하는 하나의 템플릿에 매핑됩니다. 템플릿 태그를 사용하여이 작업을 수행하는 방법을 찾았지만 Django는 템플릿 내부에 로직을 넣는 것을 좋아하지 않습니다.사이드 바에 "최근 게시물"목록 ​​만들기.

내가 생각하는 문제는 내가 최근 게시물을 사이트 전체에 표시하고 싶거나, base.html에 매핑하기로되어있는보기이기 때문에 내 base.html 내에 존재하게하려는 것입니다. , 나는 이것에 아주 새롭다. base.html에 대한 새로운 뷰를 작성해야하는지 또는 템플릿 태그를 사용해야하는지 또는 기존 뷰를 확장해야하는지 (이 방법을 사용하면 ' 사이트가 넓습니까?).

나는 본질적으로 (그들은 역순 정렬하고)

{% for post in post_list[:4] %} 
<a href="{{ post.get_absolute_url }}"> {{ post.title }} </a> 
{% endfor %} 

답변

2

당신은 템플릿 태그를 사용할 수 있습니다 다음과 같은합니다. 더 구체적으로는 inclusion tag이 필요합니다. 이렇게하면 작은보기와 같은 코드를 통해 템플릿 내부에 렌더링 된 스 니펫을 삽입 할 수 있습니다. 지금

from django import template 
register = template.Library() 

@register.inclusion_tag('blog/snippets/recent_posts.html') 
def render_recent_blogposts(): 
    return { 
     # This is just an example query, your actual models may vary 
     'post_list': BlogPost.objects.all().order_by("published_on")[:4] 
    } 

만들 : 당신의 blog 응용 프로그램에 (장고 기본적으로 여기 검색은 앱 내에서 templatetags 폴더를 만드는 것이 중요합니다) 및 다음을 추가

는 예를 들어, templatetags/blog_tags.py 파일을 생성 blog/snippets/recent_posts.html 템플릿 (이것은 어디에서든지 그것이 위의 @register.inclusion_tag(...)을 mathecs로 될 수 있습니다.) :

<ul> 
    {% for post in post_list %} 
     <li><a href="{{ post.get_absolute_url }}"> {{ post.title }}</a></li> 
     ... 
    {% endfor %} 
</ul> 

마지막으로, 원래의 템플릿에, 이제 렌더링 할 수 있습니다 템플릿 태그 :

<aside> 
    {% load blog_tags %} 
    {% render_recent_blogposts %} 
</aside> 
관련 문제