forms.Form with class in html-rendering

13 views
Skip to first unread message

Kai Kobschätzki

unread,
Jul 28, 2019, 9:57:24 AM7/28/19
to Django users
Heiho,
I wrote a class in views.py
class UploadFileForm(forms.Form):
    file = forms.FileField()

and I use it in a function like

def import_data(request):
    if request.method == "POST":
        form = UploadFileForm(request.POST,
                              request.FILES)
[...]
   return render(
      request,
      'import_form.html',
     {
        'form': form,
	[...]

in my template import_form.html I embedded with

{{ form }}

It renders to

<th><label for="id_file">File:</label></th><td><input type="file" name="file" required id="id_file"></td>

All fine, all things do what they should do.

But I want to insert in this rendering such thing like class="btn btn-info", so it would render 
<input type="file" class="btn btn-info" name="file" required id="id_file">.

How is it possible? I wasn't able to find anything in the documentation.

Thanks for your help,

bengoshi


 

Juhana Jauhiainen

unread,
Jul 28, 2019, 10:14:40 AM7/28/19
to django...@googlegroups.com
Hi, 

You can achieve this by customizing the widget which renders the HTML for the form field. You can find more information in the documentation here  

-Juhana

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/6341d842-c40d-b84e-fe6f-d35c188b332b%40gmail.com.

Kai Kobschätzki

unread,
Jul 28, 2019, 10:28:43 AM7/28/19
to django...@googlegroups.com

Hi Juhana,

thanks for the fast response! This is helpfull, I will study it :)

Best Greetings

bengoshi

Jani Tiainen

unread,
Jul 28, 2019, 10:36:42 AM7/28/19
to django...@googlegroups.com
Hi.

Be aware that pushing rendering data like styles to form code has a nasty drawback.

If you want to change that it is code change. And at some point it will get burden to maintain styles in code.

There are few options still. Recent versions of django renders widgets using templates. Use that.

There are few libs like django-sniplates that allows same.

Finally you don't even need to use form rendering. You can write html manually. (This is what I do usually)

Reply all
Reply to author
Forward
0 new messages