2011-10-26 1 views
0

저는 새로운 프로젝트를 시작하려고합니다. 이번에는 장고가 갈 길이라고 생각합니다. 저는 지난 2 주 동안 문서를 읽었으며 약속을 지켜 봅니다.django를 사용하여 기본 템플릿에서 동적 메뉴를 만드는 방법

좋아, 문제는 (C# MVC에서) 부분 렌더링에 대해 아무것도 찾을 수 없다는 것입니다. 예를 들어 데이터베이스에서 메뉴 항목을 가져 오는 동적 메뉴를 원한다면 기본 템플릿 (또는 마스터 페이지)이 각 요청에 따라 메뉴를 렌더링한다고 기대할 수 있습니다 (부분 렌더러는 다른 동작을 호출하거나 일부는 세션 데이터). 따라서이 템플릿은 내 템플릿이이 기본 템플릿에서 상속하는 한 무료로 제공됩니다.

솔직히 나는 이것을 달성하는 방법에 대한 단서가 없습니다.


하위 템플릿에 포함되지 않은 데이터를 사용하는 기본 템플릿의 일부 코드는 무엇입니까? render_to_response ('child_content.html', 문맥)를 호출 할 때마다 여분의 변수 (아마도 'menu_list_items')를 포함하고 싶지 않습니다. 이것이 가능한가?

감사합니다.

답변

6

이 기능을 제공하려면 context processor 또는 custom template tag을 사용할 수 있습니다.

context_processor는 모든 RequestContext에 객체를 추가 할 수있는 간단한 함수입니다. 커스텀 템플리트 태그는 메뉴를 렌더링 할 수있는 자체 템플릿 스 니펫과 컨텍스트를 가질 수 있습니다.

+0

그 트릭을해야합니다 :) 탱크 당신 –

0

템플릿 재사용 : 일반 레이아웃을위한 기본 템플릿을 만들고 개별 페이지에 대한 세부 템플릿을 사용해야합니다. 이 내용은 이미 Django documentation에 자세히 설명되어 있습니다.

from django.shortcuts import render_to_response as django_render_to_response 
def render_to_response(template, params, context_instance): 
    return django_render_to_response(template, 
         AppendStandardParams(request, params), 
         context_instance) 
: 그 일반적인 부품에하는 경향이 무엇

(예를 들어 말의 사용에있는 사이트의 현재 부분을 강조 메뉴), 내 자신의 render_to_response 기능을 만들려면 다음에 가깝다 이 예에서

def AppendStandardParams(request, params): 
    if request.META['PATH_INFO'].startswith('/customer'): 
     params['category'] = 'customer' 
     params['title'] = 'Customer overview' 
    # and so on for all different parts 

categorytitle 태그 메뉴를 강조하기 위해 사용되는 일부 값이 구성됩니다

ApplyStandardParams 방법은 현재 경로에 따라 메뉴를 구성 제목 등. 예를 들어 :

<!-- Customer menu entry: change class if this is the current category. --> 
<li{% if category == "customer" %} class="selected"{% endif %}>Customers</li> 

마지막으로, 대신 일반 render_to_response 수입의, 뷰에서 사용하는, 난 그냥보기에 내 사용자 정의 버전을 사용할 수 있습니다 from lib.views import * 같은 것을 수행. 이 방법으로 뷰의 모든 코드 구문이 동일하게 유지되지만 새 뷰나 앱을 만들 때마다 메뉴를 사용자 정의 할 필요가 없습니다.

관련 문제