Thursday, April 28, 2011

Removing the Label From Django's TextArea Widget

How do I remove the label that comes attached to the TextArea I am trying to use with Django? I'm trying to find ANY information about this issue but I cannot seem to find anything relating to my problem. This is what I'm doing in my code:

class CommentForm(forms.Form):
    comment = forms.CharField(widget=forms.Textarea())

This is the HTML that it produces:

<label for="id_text">Text:</label> 
<textarea id="id_text" rows="10" cols="40" name="text"></textarea>

That label is no good and I'd like a way to remove it. That code was produced via:

{{ form.as_p }}

(I removed the paragraph tags because they are irrelevant)

EDIT: I added the class CommentForm part for further clarification.

Anyone have any suggestions?

From stackoverflow
  • This should work with the latest version (trunk) of django:

    comment = forms.CharField(label="", help_text="", widget=forms.Textarea())
    

    Hope that helps!

    AlbertoPL : Unfortunately I'm using Django 1.0.2, and I guess this doesn't happen to work yet.
    lemonad : That's weird. It should not be a Django 1.1 feature (I just couldn't easily verify that it works in Django 1.0.2).
  • The Django documentation on customizing labels says it could be turned off with auto_id argument to Form constructor:

    f = ContactForm(auto_id=False)
    
    AlbertoPL : nvm my previous comment, I deleted it, however this still does nothing for me, am I possibly initializing it in the wrong spot? I'm doing it in the view before the page is rendered.
    Grzegorz Oledzki : I am not really sure but I guess you could put it like this: class CommentForm(forms.Form): auto_id = False comment = forms.CharField(widget=forms.Textarea())
    AlbertoPL : Ok, it looks like this SHOULD be the way to do it, however I'm getting no change. I'll update the question with more results.
    Grzegorz Oledzki : So, did it work?
    AlbertoPL : It did. The label is gone. However, the text part of the label was really what I wanted to remove. Nevertheless, this is the correct answer to my stated question.
  • A quick-and-dirty solution would be to iterate through the form manualy (with {% for field in form %}) and handle the "problematic" field specially. You could also override the as_p/as_table methods if needed.

0 comments:

Post a Comment