`` 태그는 직접 써주어야 합니다), ``form.as_ul``\ 을 사용하여 목록 아이템을 출력할 수 있습니다.
폼 템플릿 커스터마이징
-----------------------------
디폴트로 생성된 HTML이 구미에 맞지 않다면, Django 템플릿 언어를 사용하여 원하는 대로 완전히 고칠 수 있습니다. 앞의 예제를 확장하여 보도록 하겠습니다.
::
각각의 명명된 폼 필드는 ``{{ form.name_of_field }}``\ 를 사용하여 템플릿으로 출력되며, 폼 위젯을 표출하기 위한 HTML을 만들어냅니다. ``{{ form.name_of_field.errors }}``\ 를 사용하여 폼 오류의 목록을 표출하고, 정렬되지 않은 목록(역자 주: unordered list, 즉 ul)으로 렌더링합니다. 이는 다음과 같이 보일 것입니다.
::
위의 목록은 그 외양을 정의할 수 있도록 ``errorlist``\ 의 CSS 클래스를 갖습니다. 오류의 표출을 더 커스터마이즈하고자 한다면 다음과 같이 루핑을 할 수 있습니다.
::
{% if form.subject.errors %}
{% for error in form.subject.errors %}
{{ error|escape }}
{% endfor %}
{% endif %}
폼의 필드에 대하여 루핑
------------------------------
폼 필드 각각에 대하여 동일한 HTML을 사용한다면, ``{% for %}`` 루프를 사용하여 각 필드에 대하여 중복으로 발생하는 코드를 줄일 수 있습니다.
::
이 루프 내에서, ``{{ field }}``\ 는 :class:`BoundField`\ 의 인스턴스입니다. ``BoundField``\ 는 다음과 같이 템플릿에서 유용한 어트리뷰트를 갖습니다.
``{{ field.label }}``
필드의 라벨. 예: ``Email 주소``.
``{{ field.label_tag }}``
필드의 라벨로서, 적절한 HTML ```` 태그로 감싼 것.
예: ``Email 주소 ``
``{{ field.value }}``
필드의 값. 예: ``someone@example.com``
``{{ field.html_name }}``
입력 엘리먼트의 이름 필드에 사용될 필드의 이름.
설정되지 않은 경우, 폼 접두어를 취함.
``{{ field.help_text }}``
필드에 연관된 도움말 텍스트.
``{{ field.errors }}``
이 필드에 관련된 유효성 검증 오류를 포함하는 ````\ 를 출력.
``{% for error in field.errors %}`` 루프를 사용함으로써 오류의 표현을 커스터마이즈할 수 있음.
이 경우, 루프의 각 개체는 오류 메시지를 담은 간단한 문자열임.
``field.is_hidden``
이 어트리뷰트는 필드가 숨김 필드이면 ``True``\ 이고, 그렇지 않으면 ``False``\ 임.
템플릿 변수로서는 그리 유용하지 않지만, 다음과 같은 조건 검사에 유용함.
::
{% if field.is_hidden %}
{# Do something special #}
{% endif %}
숨김 필드 또는 보임 필드에 대하여 루핑하기
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Django의 기본 폼 레이아웃에 의존하지 않고 수작업으로 템플릿에서 폼의 레이아웃을 잡는다면, 숨김 필드(`` ``\ )와 보임 필드를 서로 다르게 취급하고 싶을 수도 있습니다. 한 가지 예로서, 숨김 필드는 아무 것도 보여주지 않으므로, 그 필드의 "옆에" 오류 메시지를 집어넣는다면 사용자에게 혼란을 초래할 것이기 때문에 이러한 필드는 다르게 취급해야 할 것입니다.
Django에는 숨김 필드 및 보임 필드에 대하여 독립적으로 루핑할 수 있는 두 가지 메소드, ``hidden_fields()``\ 와 ``visible_fields()``\ 가 있습니다. 두 메소드를 사용하도록 앞의 예제를 수정하여보겠습니다.
::
이 예제에서는 숨김 필드에서 발생하는 어떠한 오류에 대해서도 처리를 하지 않습니다. 보통 숨김 필드에서 발생하는 오류는 폼이 조작되었을 가능성을 암시하는데, 그 이유는 일반적인 폼 인터랙션은 숨김 필드를 변경하지 않기 때문입니다. 하지만, 오류 표시를 삽입하는 것도 쉽게 할 수 있습니다.
폼 템플릿의 재사용
-----------------------
만일 여러분의 사이트에서 폼에 대한 동일한 렌더링 로직을 여러 곳에서 사용한다면, 독립적인 템플릿에서 폼의 루프를 줄이고 :ttag:`include` 태그를 써서 다른 템플릿에서 재사용하는 방법으로 중복을 줄일 수 있습니다.
::
# In form_snippet.html:
{% for field in form %}
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
{% endfor %}
템플릿에 전달된 폼 개체가 문맥상 다른 이름을 갖는다면, :ttag:`include` 태그의 ``with`` 인자를 써서 별칭을 붙일 수 있습니다.
::
이러한 일을 자주 수행한다면, 맞춤 :ref:`inclusion tag`\ 를 만드는 것을 고려해볼 수 있습니다.
Further topics
==============
이로써 기초를 다루었습니다만, 폼으로 할 수 있는 일이 더 많습니다.
.. toctree::
:maxdepth: 2
formsets
modelforms
media
.. seealso::
:doc:`The Forms Reference `
폼 필드, 폼 위젯, 폼과 필드의 유효성 검증 등을 포함하는 전체 API 레퍼런스를 다룹니다.