FormFieldのlabel属性にhtmlタグを入れる

そんなことをしなきゃいけないケースはほとんどないけど一応メモしておく。

試しに<br/ >を入れてみる

class SampleForm(forms.Form):
    sample_field = forms.CharField(label=u"abc<br/ >xyz")

これだとhtmlがエスケープされるので改行にならない

from app.student.forms import SampleForm
from django.template import Context, Template

form = SampleForm()
context = Context(dict(form=form))
print Template("{{ form }}").render(context)
# => u'<tr><th><label for="id_sample_field">abc&lt;br/ &gt;xyz:</label></th><td><input id="id_sample_field" name="sample_field" type="text" /></td></tr>'


エスケープさせないためには、Formを定義するときにmark_safeを使う

from django.utils.safestring import mark_safe

class SampleForm(forms.Form):
    sample_field = forms.CharField(label=mark_safe(u"abc<br/ >xyz"))
from app.student.forms import SampleForm
from django.template import Context, Template

form = SampleForm()
context = Context(dict(form=form))
print Template("{{ form }}").render(context)
# => u'<tr><th><label for="id_sample_field">abc<br/ >xyz:</label></th><td><input id="id_sample_field" name="sample_field" type="text" /></td></tr>'