2011-04-19 7 views
2

For 루프가 아니라 내 Modelform 필드를 별도로 구문 분석하려고합니다. 그리고 일부 필드에서 장고 HTML을 구문 분석하여 해당 요소를 찾습니다. 나는이있다 : 내가 장고 HTML 양식 요소를 구문 분석하는 템플릿 코드에 ???에서 원하는,Django, for 루프없이 단일 양식 필드 (HTML) 구문 분석 방법

<form action="#" method="POST" name="notifictaionForm"> 
    <ul> 
     <li><label>{{ form.fields.title.label }}</label> <span>{{ notification.title }}</span></li> 
     <li><label>{{ form.fields.create_date.label }}</label> <span>{{ notification.create_date }}</span></li> 
     <li><label>{{ form.fields.description.label }}</label> <span>{{ notification.description }}</span></li> 
     <li><label>{{ form.fields.status.label }}</label> <span>{{ form.fields.status.??? }}</span></li> 
    </ul> 
</form> 

그래서 내가 필드 이름이 아니라 HTML 요소를 구문 분석 할 수 있습니다.

누군가이 작업을 수행하는 방법을 알고 있습니까?

답변

9

잘 이해했다면 django의 자동 생성 된 status 필드를 원하십니까? 그리고 그것은 매우 간단합니다 :

{{ form.status }} 

몇 가지 추가 단어 :

>>> form['field_name'] 
이 이

선언 된 필드에 저장됩니다

양식 필드는 다음과 같이 액세스 할 수 있습니다 DICT 같은 객체이다 form.fields, SortedDict 개체입니다. 따라서이 변수를 사용하여 필드에 액세스 할 수 있지만 권장 방법은 항상 가장 짧은 방법입니다.

파이썬를 처음 사용하는 경우, 당신은 그러나이 같은 파이썬 코드에서 액세스 할 수 없습니다, 당신은 속성으로 필드를 선언하도록 그것을 얼마나 궁금 할 것이다 :

>>> form.field_name 
AttributeError: 'Form' object has no attribute 'field_name' 

음이 있기 때문입니다 파이썬의 클래스는 정적이 아니므로 클래스 정의에서 새로운 모든 것을 구현하는 데 메타 클래스를 사용할 수 있습니다. 장고는 그것을 사용하여 친숙한 API를 만듭니다. 기본적으로 다음과 같이 바뀝니다.

  1. 파이썬 인터프리터는 Form 클래스를 구문 분석합니다.
  2. 해석자는 django.forms.Form에서 상속되고 DeclarativeFieldsMetaclass으로 설정된 __metaclass__ 특성을 찾습니다.
  3. Metaclass가 클래스를 구조 조정합니다. 특성이 제거되고 .base_fields 특성이 만들어집니다.
  4. base_fields이 아닌 fields? 글쎄요, 이것은 또 다른 이야기입니다. 이것은 ModelForm의 모델에서 오는 필드가 양식 클래스에서 선언 된 필드와 어떻게 분리되는지와 관련이 있습니다.

그러나 양식이나 모델에 추가 구성 옵션을 제공하기 위해 종종 사용되는 class Meta으로 메타 클래스를 혼동하지 마십시오.

지금 템플릿으로 돌아 가기. 파이썬 코드에서 form.field_name에 액세스 할 수 없으므로 왜 템플릿에서 가능합니까?

  • 사전 조회
  • 속성 조회
  • 메소드 호출
  • 목록 인덱스 조회
  • : django documentation에 설명 된대로 템플릿 시스템은 점을 발견 할 때,이 순서대로 다음 검색을 시도

즉, 템플릿 시스템은 만날 때 반환하려고 시도합니다. {{ form.field_name }}은 : form['field_name']입니다.

+0

고마워요! 나는 장고 문서의 각 루프에 대한 예제 때문에 form.fields 객체를 사용해야한다고 thougth. –

+0

몇 가지 추가 단어를 추가, 나는 그것이 유용 할 것이라는 점을 희망한다 :) – Ski

+0

+1 정말 좋은 답변! – jathanism