Custom renderer for django.forms
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
goodforms Get input type from field #6 Dec 8, 2015
.gitignore Use htmlutils Nov 14, 2015
.travis.yml Add travis Dec 1, 2015
README.rst Update Dec 4, 2015 Process action and multipart attributes in form tag Dec 4, 2015
setup.cfg Codestyle fixes Dec 4, 2015 Complete tests, update version Dec 2, 2015


Build Status

Good forms for Django

GoodForms — rails-like renderer for your form fields. Provide fully control of filed styles and attributes. It's not replacement for django.forms.


Run pip install django-goodforms and add goodforms to INSTALLED_APPS. That's all.


The view:

from django.shortcuts import render
from django import forms

class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.PasswordField()

def sign_up(request):
    from = MyForm(initial={'username': 'johnsmith'})
    return render(request, 'index.html', {'form': form})

The template:

{% load form_fields %}

{% form name="login" class="login-form" %}
    {% textfield form.username class="login-form_input" %}
    {% textfield form.password class="login-form_input" %}
    {% submit_button "Login" %}
{% endform %}


Form tag

  • Form tag automatically inject csrf-token.
  • Fields use name attribute as prefix for id and for in labels.
{% form name="myform" action="url_or_route_name" multipart=True %}
    <!-- Form content -->
{% endform %}

Textfield and Textarea

{% textfield form.title **kwargs %}
{% textarea form.description **kwargs %}


{% select values="ru:Russia,de:Germany" %}

You can use any dict, iterable collection or queryset as values list:

{% select form.county values=any_iterable_object value_key="code" label_key="title" %}

Checkbox and radio-button

{% radio form.gender value="female" %}
{% radio form.gender value="male" %}

The label attribute wraps checkbox to <label> tag. All attributes provite to it:

{% checkbox form.agree label="I agree" style="font-weight: bold;" %}

<label style="font-weight: bold;">
    <input type="checkbox" name="agree" value="1"> <span>I agree</span>

Submit button

{% submit_button "Send message" %}
{% submit_button "Save as draft" name="is_draft" value=True %}


You can use any of field without a form class:

{% input "username" required=True %}
{% select "city" values="1:New York, 2:London" %}


GOODFORMS_XHTML — Enable or disable XHTML syntax (default: False)

GOODFORMS_AUTO_ID — Automatically generate id and for attributes for fields and labels (default: True)

GOODFORMS_ID_PREFIX — Prefix for auto-generated id and for attributes. For forms without name attribute (default: field)


Licensed under the MIT license.