2012-12-08 7 views
0

필드 레이블을 알고 있습니다 ("BOP"라고 말하면 됨). 오른쪽 필드 개체를 반환하는 templatetag를 만들고 싶습니다. 그래서이 형식으로 사용할 수 있습니다. 이 작동하는 경우 그 이유는 다음과 같다,장고 templatetag 필드 레이블을 기반으로 필드를 반환하려면

return next((fld for fld in form if fld.label == arg), None) 

:

{% with bop=form|f_lookup:"BOP" %} 
    <div> 
     <div class="span-4">BOP</div> 
     <div class="span-5">{{ bop }}</div> 
    </div> 
{% endwith %} 

이 시도 ..

@register.filter(name='f_lookup') 
def field_lookup_by_label(form, arg): 
    """Look up a form field based on a label""" 
    return next((form.fields[k] for k, v in form.fields.items() if v.label == arg), None) 
+0

기능은 나에게 좋아 보인다. 당신은 그 전화를 받았 는가? 사용자 정의 템플릿 태그를 템플릿에로드 했습니까? –

+0

맞아요. 작동하는 것처럼 보이지만, 템플릿이 클래스의 문자열을 렌더링하는 것으로 보입니다. – rh0dium

답변

2

내 templatetag가 작동하지 않습니다 그리고 내가 뭔가를 분명 내려다 보이는해야 알 . form.fieldsField 사전의 사전이며 템플릿에서 자체를 렌더링하는 방법을 알지 못합니다. 양식을 __getitem__ 함수라고 부르면 필드가 BoundField 개체로 변환되며 HTML 자체를 HTML로 렌더링하는 방법을 알고 있습니다. https://github.com/django/django/blob/master/django/forms/forms.py의 101 및 412 줄을보십시오.

당신이 form.fields의 요소를 반환

, 당신은 대신 BoundField의하는 Field 서브 클래스를 반환하고, 만 BoundField 객체는 템플릿에 자신을 렌더링하는 방법을 알고있다.

또한 bop 필드 생성자에 키워드 인수로 레이블을 전달하지 않으면 원래 함수가 작동하지 않는다고 생각합니다. Field 객체의 레이블은 label=None으로 생성자를 호출 한 경우 None이됩니다. BoundField 개체가 구성되면 레이블은 필드 레이블에서 가져 오거나 labelNone 인 경우 필드 이름에서 레이블을 가져옵니다.

+0

당신에게 명성을! 네가 축하해 줬다 니. FWIW 나는 문자 그대로 같은 이해에 도달했다. n00b에서 SO까지 정말 잘 했어. 탑승을 환영합니다! 또한 일을 찾고 있다면 도움을받을 수 있습니다! – rh0dium

관련 문제