2009-12-24 6 views
0

으로 메소드 호출을 결합합니다. 다른 템플릿 태그에 종속적 인 템플릿 태그의 결과를 만들려고합니다. 사용 사례는 다음과 같습니다. 나는 테이블에 보여주고 싶은 모든 컬럼을 포함하는 헤더리스트 + 그들이 보여주고있는 모델의 컬럼 + 그들이 보이는지 아닌지를 가지고있다.django templatetags template, {{}} 템플릿 태그 컨텍스트 변수

LIST_HEADERS = (
    ('Title', 'title', True), 
    ('First Name', 'first_name', True), 
    ('Last Name', 'last_name', True), 
    ('Modified At', 'modified', False), 
) 

이제 모든 헤더를 인쇄하는 templatetag가 있습니다. 따라서 테이블의 본문을 인쇄하는 템플릿 태그를 만들고 싶습니다. 따라서 헤더 목록을 가져 와서 어떤 헤더가 보이는지 확인하고 이에 따라 내 가치를 보여 주거나 숨기고 싶습니다. 당신이 값 {{model_instance.title}}이 볼

<tr class="{% cycle odd,even %}"> 
    {% for header in headers %} 
    {% if header.visible %} 
    <td><a href="{{ model_instance.get_absolute_url|escape }}">{{ model_instance.title }}</a></td> 
    {% else %} 
    <td style="visibility:hidden;"><a href="{{ model_instance.get_absolute_url|escape }}">{{ model_instance.title }}</a></td> 
    {% endif %} 
    {% endfor %} 
</tr> 

:

그러므로 나는 아래 templatetag 템플릿을 만들었습니다. 이 값을 런타임에 model_instance.title, model_instance.first_name, model_instance.last_name ...으로 변경하고 싶습니다.

따라서 {model_instance}와 header.model_column을 어떻게 결합 할 수 있는지 검색하고 있습니다.

model_column은 LIST_HEADERS의 두 번째 항목과 같습니다. 따라서 model_column는

따라서 용액 내가 어떻게 할 수있는 방법을 찾기 [의사] model_instance.header.model_column {{}} 의사]

..thus 같을 것이다 .. 제목 FIRST_NAME 것 django 템플릿 메서드 호출을 장고 템플릿 태그 속성과 결합하십시오 .hh .. 미친 소리 : D

나는 충분히 설명하기를 바래! 아마도 내 문제에 대한 훨씬 쉬운 해결책이있을 것입니다. 그러나 이것은 꽤 일반적이고 쉬운 것처럼 보입니다.

답변

2

변수의 값에 따라 결과를 렌더링하는 쉬운 방법을 제공하기 때문에이 필터를 사용합니다.

@register.filter 
def field_from_name(instance, field_name): 
    return getattr(instance, field_name, None) 

다음 템플릿

:

{{ model_instance|field_from_name:header.model_column }} 
+0

감사합니다. 나는 이것을 시도 할 것이라고 생각한다! 좋아 보인다. –

2

단순화이.

먼저 장고 템플릿 언어에 대해 읽으십시오. 입니다. 별로 아니에요. 변수, 목록 및 사전을 보류 할 수 있습니다.

보기 기능에서 모든 "작업"을 수행하는 것이 더 간단합니다.

{% for style, name, value in show_list %} 
<tr class="{% cycle odd,even %}"> 
    <td class="{{style}}"><a href="...">{{value}}</a></td> 
{% endfor %} 

실제로 템플릿에서

show = [ ] 
for title, field_name, visible in LIST_HEADERS: 
    if visible: style= "visibility:hidden" 
    else: style= "" 
    show.append((style, title, getattr(object,field_name)) 
render_to_response("template", { 'show_list': show, ... }, ...) 

, 내가보기 기능에서 LIST_HEADERS 떨어지는 게 좋을 것.

show = [ 
    ("", 'Title', object.title), 
    ("",'First Name', object.first_name), 
    ("",'Last Name', object.last_name), 
    ("visibility:hidden",'Modified At', object.modified), 
] 
render_to_response("template", { 'show_list': show, ... }, ...) 

나는 명시 적이며보기 기능이므로 위와 같이 작업하기가 훨씬 쉽습니다.

+0

보기에서 더 많은 작업을 수행하려면 +1을, 템플리트에서는 더 적게 수행하십시오. 모든 것이 더 읽기 쉽게 만들어 줄 것입니다. – cethegeek

+0

와우 .. 감동. 너무 빨리 .. 그리고 나는 당신의 게시물에서 많은 것을 배웠습니다. –

관련 문제