2011-12-21 2 views
1

편리한 출력 양식 메서드 {{ form.as_ul }}이 마음에 들지만 사용 방법은 계속되지만 각 필드 바로 위에 오류를 표시하는 대신 모든 오류를 미리 캡처 할 수 있습니다.Django 템플릿에서 {{form.as_ul}}을 사용하는 동안 양식 오류 표시를 제어합니다.

django docs에 언급 된대로 각 양식 요소를 반복하는 방법이 있지만 오류 디스플레이에 대한 제어권을 얻는 것을 제외하고는 form.as_ul()의 기능을 계속 사용하고자합니다.

답변

2

Reusable Form Templates을 사용하여이 문제를 해결했습니다.

그것의 간단한

...

  1. 는 필요에 따라 다음과 같은 코드 조각이있는 재사용 가능한 템플릿을 만듭니다.

  2. 바로 양식의 상단에있는 모든 오류를 표시하려면

  3. ...

    {% if form %} 
        {% if form.errors %} 
         {% for field in form %} 
           {{field.errors}} 
         {% endfor %} 
        {% endif %} 
        {% for field in form %} 
         <li>{{ field.label_tag }}: {{ field }}</li> 
        {% endfor %} 
    {% endif %} 
    
  4. 바로 오류를 사용 주위의 기본 HTML 요소없이 각 양식 필드 후 모든 오류를 표시하려면 ...

    {% for field in form %} 
        {{ field.label_tag }}: {{ field }} 
        {% for error in field.errors %}{{ error }}{% endfor %} 
    {% endfor %} 
    
  5. 두 번째 템플릿을 사용하고 Inclusion Tag

을 생성
+0

축하합니다. 할 수있을 때 다른 사람들이 당신의 성공을 통해 배울 수 있도록 귀하의 대답을 '수락'으로 표시하십시오. 건배 ~ –

+0

내가 당신이해야 할 일입니다. :-) 그리고 당신은'help_text'와'non_field_errors'를 잊어 버렸습니다. – DrTyrsa

+0

@DrTyrsa, 귀하의 의견은 분명히 위의 솔루션에 도달하는 데 도움이. 고맙습니다. –

1

내가 보는 유일한 방법은 forms.Form에서 새 양식 클래스를 상속 받고 원하는대로 다시 as_ul 메서드를 변경하는 것입니다. 로그인 양식과 같은 제 3 자 양식을 사용하려는 경우에는 그리 좋지 않습니다 (이 방법은 없을 것입니다).

난 최선의 해결책은 자신의 inclusion tag을 만들고 그것을 사용하여 양식을 만드는 것이라고 생각합니다. as_ul ({% render_form form %})과 같이 짧지 만 매우 유연하며 모든 양식에서 작동하며 HTML과 Python 코드가 섞이지 않습니다.

0

여전히 템플릿에서 양식을 렌더링하기위한 사용자 정의가 매우 유연하다고 생각합니다. 난 보통 내 webapps이 않습니다. 당신은 약간의 자바 스크립트와 CSS로 작업 할 수 있지만 큰 문제는 아닙니다. 게다가 우리는 앱을 단순하게 만들어야한다고 생각합니다.