2014-04-04 3 views
1

모든 페이지의 내비게이션 막대에 데이터를 표시 할 수 있도록 포함 태그를 만들려고합니다. 태그는 "base.html"에 포함되어 어디에나 표시되어야합니다.Django 포함 태그가 데이터를 표시하지 않습니다.

tags.py menu.html 템플릿이 비어 있고 데이터를 표시되지 않는 몇 가지 이유를 들어

@register.inclusion_tag('menu.html') 
def show_hoods(HoodList): 
    gethoods = Hood.objects.all() 
    return {'gethoods': gethoods} 

menu.html

{% for hood in gethoods %} 
<h3>{{ hood.name }}</h3> 
{% endfor %} 

.

또한 menu.html을 실행하면 간단한 {% include 'menu.html'%}이 (가) base.html에서 작동합니까? 윌은 자동으로 렌더링됩니까?

편집 : 아래의 의견에 따라 , 상기 코드는 inclusion_tag가 {%는 % 포함}하지만 {% load %} 대신 사용되는로드되지 않는 그러나 base.html 코드가 올바르지 맞다.

는 base.html

{% load tags %} 
{% show_hoods hoodlist %} 

에게 피드백에 대한 감사를 수정!

+0

포함 태그를 base.html에 어떻게 추가하고 있습니까? 또한 HoodList는 무엇입니까? –

+0

HoodList는 요청의 이름 일 뿐이므로 이름을 "요청"으로 변경해야합니까? base.html에 따라 {% include %} 태그를 사용할 계획이었습니다. – WayBehind

+1

포함 태그를 이름을 사용하여 추가합니다. 따라서 base.html에 {% show_hoods %}를 추가하면 menu.html을 Hood 객체 목록으로 렌더링해야합니다. menu.html을 직접 보면 menu.html에서 show_hoods에서 전달한 컨텍스트 변수 (gethoods)가 필요하므로 빈 것으로 표시됩니다. –

답변

1

menu.html 템플릿을 직접 보면 컨텍스트 변수가 설정되어 있지 않으므로 아무 것도 표시되지 않습니다. gethoods은 비어 있으므로 템플리트의 for 루프가 루프 할 부분이 없습니다.

include 태그의 주요 목적 중 하나는 여분의 컨텍스트 변수를 설정 한 다음이 변수를 사용하여 템플릿을 렌더링하는 것입니다. 템플릿을 직접 보면 변수가없는 템플릿이 표시되지만 포함 템플릿 (케이스에 {$ show_hood %})을 포함하면 컨텍스트 변수 (gethoods)가 추가되어 템플릿을 사용하여 렌더링됩니다.

두 번째 질문에 답하면 {% include %} 태그 대신 이름 (기본적으로 함수 이름)을 사용하여 포함 템플릿을 추가합니다. {% include %} 태그는 하나의 템플리트를 다른 템플리트의 내부로 단순히 렌더링하려는 경우이고, 컨텍스트 변수가 필요 없거나 상위 템플리트에서 사용 가능한 컨텍스트 변수를 사용하는 경우에 사용됩니다.

+0

세부 정보 주셔서 감사합니다. Django는 지난 10 년 이상 새로운 점을 알고 있으며 코드 작성, 쿼리 및 렌더링 된 템플릿을 템플릿에 직접 포함시키는 응용 프로그램을 사용하고 있습니다. :) – WayBehind

관련 문제