[장고] 폼 라벨에서 콜론 제거하기

소요 시간: 5분

라벨 정의

Django 폼에서 라벨에 콜론을 제거하려면 폼 필드의 라벨을 정의할 때 콜론을 제외한 라벨 텍스트를 지정할 수 있습니다. 예를 들어, Django 폼을 정의할 때 다음과 같이 필드 라벨을 설정할 수 있습니다:

from django import forms

class MyForm(forms.Form):
    name = forms.CharField(label='Name')  # 콜론 없이 라벨 설정
    email = forms.EmailField(label='Email Address')  # 콜론 없이 라벨 설정

이렇게 하면 폼에서 자동으로 라벨에 콜론이 추가되지 않습니다.

또한, 템플릿에서 폼을 렌더링할 때 커스터마이징할 수 있습니다. 예를 들어, 템플릿에서 as_p 또는 as_table 대신 직접 폼 필드를 렌더링할 수 있습니다:

<form method="post">
  {% csrf_token %}
  <div>
    <label for="{{ form.name.id_for_label }}">{{ form.name.label }}</label>
    {{ form.name }}
  </div>
  <div>
    <label for="{{ form.email.id_for_label }}">{{ form.email.label }}</label>
    {{ form.email }}
  </div>
  <button type="submit">Submit</button>
</form>

이렇게 하면 라벨에 콜론이 자동으로 추가되지 않으며, 원하는 형태로 폼을 렌더링할 수 있습니다.


오버라이딩

Django 폼 클래스에서 label_suffix를 오버라이드하는 방법과 특정 필드에 대해서만 콜론을 제거하는 방법을 코드로 예시를 보여드리겠습니다.

전체 폼의 라벨에서 콜론 제거하기

폼의 초기화 메서드에서 label_suffix를 오버라이드하여 폼 전체에서 라벨의 콜론을 제거할 수 있습니다.

from django import forms

class SomeForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.label_suffix = ''  # 전체 폼에서 라벨 콜론 제거

    class Meta:
        model = MyModel
        fields = ['name', 'email']

특정 필드의 라벨에서만 콜론 제거하기

특정 필드에 대해서만 라벨의 콜론을 제거하려면 해당 필드의 label_suffix를 초기화 메서드에서 설정합니다.

from django import forms

class SomeForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['email'].label_suffix = ''  # 'email' 필드의 라벨 콜론 제거

    class Meta:
        model = MyModel
        fields = ['name', 'email']

두 가지 방식을 함께 사용하는 예시

전체 폼의 라벨에서 콜론을 제거하고, 특정 필드에 대해 콜론을 다시 추가하거나 제거할 수 있습니다.

from django import forms

class SomeForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.label_suffix = ''  # 전체 폼에서 라벨 콜론 제거
        self.fields['email'].label_suffix = ':'  # 'email' 필드에 콜론 추가

    class Meta:
        model = MyModel
        fields = ['name', 'email']

위 예시에서는 전체 폼의 라벨에서 콜론을 제거한 후, email 필드의 라벨에 콜론을 다시 추가하고 있습니다. 이를 통해 특정 필드에 대해서만 라벨 스타일을 커스터마이징할 수 있습니다.

마지막으로, django-crispy-forms 같은 라이브러리를 사용하고 있다면, 해당 라이브러리의 설정을 통해 콜론을 제거할 수 있는 옵션이 있을 수 있으므로 관련 문서를 참조하면 도움이 됩니다.

장고 리스트