23

I have a Django form that is part of page. Lets say I have a field:

search_input = forms.CharField(_(u'Search word'), required=False)

I can access it only in template via {{ form.search_input }}. How to set custom HTML attrs (such as name and value)? I would like to find flexible solution, that would allow me to add any needed custom attributes to all types of fields.

I found https://docs.djangoproject.com/en/dev/ref/forms/widgets/#widget

But using attrs gives me (if used with CharField):

__init__() got an unexpected keyword argument 'attrs'

4 Answers 4

29

You can change the widget on the CharField to achieve the effect you are looking for.

search_input = forms.CharField(_(u'Search word'), required=False)
search_input.widget = forms.TextInput(attrs={'size': 10, 'title': 'Search',})
Sign up to request clarification or add additional context in comments.

Comments

11

You can also try this:

search_input = forms.CharField(
    _(u'Search word'),
    required=False,
    widget=forms.TextInput(attrs={'size': 10, 'title': 'Search',})
)

This is documented in the section entitled Styling widget instances.

Comments

9

There's also the template-only solution using a filter. I recommend django-widget-tweaks:

{% load widget_tweaks %}

{{ form.email|attr:'required:true' }}

1 Comment

I havent been able to make this work if I want to change e.g "pattern"
8

Old question, but for who-ever is looking for another alternative, there's also this: https://docs.djangoproject.com/en/1.6/topics/forms/modelforms/#overriding-the-default-fields

You can do something like this:

from django.forms import ModelForm, Textarea
from myapp.models import Author

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title', 'birth_date')
        widgets = {
            'name': Textarea(attrs={'cols': 80, 'rows': 20}),
        }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.