The best way to have DRY Django forms. The app provides a tag and filter that lets you quickly render forms in a div format while providing an enormous amount of capability to configure and control the rendered HTML.

Overview

django-crispy-forms

http://codecov.io/github/django-crispy-forms/django-crispy-forms/coverage.svg?branch=main

The best way to have Django DRY forms. Build programmatic reusable layouts out of components, having full control of the rendered HTML without writing HTML in templates. All this without breaking the standard way of doing things in Django, so it plays nice with any other form application.

django-crispy-forms supports Django 2.2, 3.1 and 3.2 with Python 3.6+.

Looking for Bootstrap 5 support? See the crispy-bootstrap5 package.

The application mainly provides:

  • A filter named |crispy that will render elegant div based forms. Think of it as the built-in methods: as_table, as_ul and as_p. You cannot tune up the output, but it is easy to start using it.
  • A tag named {% crispy %} that will render a form based on your configuration and specific layout setup. This gives you amazing power without much hassle, helping you save tons of time.

Django-crispy-forms supports several frontend frameworks, such as Twitter Bootstrap (versions 2, 3, and 4), Uni-form and Foundation. You can also easily adapt your custom company's one, creating your own, see the docs for more information. You can easily switch among them using CRISPY_TEMPLATE_PACK setting variable.

Authors

django-crispy-forms is the new django-uni-form. django-uni-form was an application created by Daniel Greenfeld that I led since version 0.8.0. The name change tries to better explain the purpose of the application, which changed in a significant way since its birth.

If you are upgrading from django-uni-form, we have instructions for helping you.

Example

This is a teaser of what you can do with latest django-crispy-forms. Find here the gist for generating this form:

http://i.imgur.com/LSREg.png

Documentation

For extensive documentation see the docs folder or read it on readthedocs

Special thanks

  • To Daniel Feldroy (@pydanny) for his support, time and the opportunity given to me to do this.
  • The name of the project was suggested by the fantastic Audrey Feldroy (@audreyfeldroy)
  • To Kenneth Love (@kennethlove) for creating django-uni-form-contrib from which bootstrap template pack was started.
Comments
  • Upgrading from 1.6.1 to 1.7.* - forms don't work

    Upgrading from 1.6.1 to 1.7.* - forms don't work

    • Package version: 1.7.2 (or 1.7.0 or 1.7.1)
    • Django version: 1.11.16
    • Python version: 3.5.2
    • Template pack: (Optional)

    Description:

    • We upgraded Speedy Net from django-crispy-forms==1.6.1 to django-crispy-forms==1.7.2

    • We didn't expect anything to change.

    • Our contact form stopped working in all 4 websites.

    Preferably also include:

    • [ ] Example Django Crispy Forms code

    The tag is {% crispy form %} on feedback_form.html

    • [ ] Screenshots

    • With django-crispy-forms==1.6.1: 2019-01-08_1949_speedy_net_-_contact_form_working

    • With django-crispy-forms==1.7.2:

    2019-01-08_1947_speedy_net_-_contact_form_not_working

    • [ ] Actual HTML generated

    There is no <textarea ... in the HTML with 1.7.0 up to 1.7.2.

    • [ ] Expected HTML

    There is <textarea ... in the HTML with 1.6.1.

    I can't paste HTML into this issue, I tried.

    opened by uri-rodberg 39
  • Bootstrap4 radio & checkbox

    Bootstrap4 radio & checkbox

    This PR adds the validation 'is-invalid' classes to the remaining field types (checkbox, checkbox multiple and radios). Fixes #865

    With this work I was changing the same lines as PR #892 so I've included those fixes there, along with the updated tests required for this change.

    For the inline radios and checkbox the format doesn't look right when the validation fails and the error message is displayed. A bit of research seems to indicate this is a known bug in bootstrap 4 and has been fixed for bootstrap 5. Bootstrap issue

    Tests have been updated and are passing and below is the image of the current output.

    screencapture-127-0-0-1-8000-bootstrap4-3-2019-09-16-21_33_03

    Edit: Fixed typo on first line.

    opened by smithdc1 23
  • Bus factor

    Bus factor

    There seems to be a bus factor of 1 on this project. Is there any way to add more people who can merge PRs, cut releases, ...? It would be really nice to get the new development work released properly, but even more importantly, if there's only one person who can do anything with this project, it's very fragile and isn't going to develop very well.

    opened by bcail 22
  • Error messages not displayed with crispy forms 1.7.2 (we had a CSS bug)

    Error messages not displayed with crispy forms 1.7.2 (we had a CSS bug)

    • Package version: django-crispy-forms==1.7.2
    • Django version: Django==1.11.23
    • Python version: 3.5 & 3.6
    • Template pack:
    CRISPY_TEMPLATE_PACK = 'bootstrap4'
    CRISPY_FAIL_SILENTLY = False
    

    Description:

    I need help. I don't know how to display error messages in crispy forms. Currently error messages which are not related to a specific field are not displayed. Error messages related to a specific field are displayed. I need to display all the error messages on the form and I don't know how? I didn't find it on the documentation of crispy forms.

    You can see my current code on https://github.com/speedy-net/speedy-net/tree/staging The forms not working right now with error messages are with URL /matches/settings/about-my-match/ The template only contains {% crispy form %}.

    Preferably also include:

    • [ ] Example Django Crispy Forms code
    • [ ] Screenshots

    When I select a min age higher than max age I do see an error message: 2019-08-07_1300_crispy_1

    But when I don't select any gender there is no error message: 2019-08-07_1300_crispy_2

    Also, when the diet (for example) doesn't contain 5 hearts I can't see the error message: 2019-08-07_1304_crispy_3

    Error messages for fields such as min age and max age are displayed correctly. 2019-08-07_1307_crispy_4

    In all the 4 cases above the user is not redirected to the success URL.

    • [ ] Actual HTML generated
    • [ ] Expected HTML
    opened by uri-rodberg 20
  • Crispy forms to render multiple forms

    Crispy forms to render multiple forms

    Hi,

    I don't think this is possible, but I thought I'd check. Does crispy forms support rendering and processing of multiple forms combined into one larger layout, and if not, has it ever been considered? EG: consider a 'Person' crispy form for a 'Person' model with name/age/etc.. attributes. Now imagine your app wants to display a form to allow a user to enter 'Parents', that is, two 'Person' models. For the layout you could render the two forms separately using two crispy tags in the template, or what if you could create a crispy form that doesn't map to a Django model, but whose layout is composed of the layouts of the two constituent forms? This would allow you to use the 'Parents' form as part of an even larger form, and also reuse the 'Parents' form in other parts of the app.

    You could achieve this reuse by having separate templates for each form composition (in this case a 'parents' template) and including them via 'includes', but having it in the code seems neater and more flexible.

    One thing you'd have to consider in addition to HTML generation is form validation (possibly by calling is_valid on each of the constituent forms).

    Post on multiple form models per view: http://stackoverflow.com/questions/569468/django-multiple-models-in-one-template-using-forms.

    opened by tarasdi 20
  • Finalise (and Release) Bootstrap 4 Support

    Finalise (and Release) Bootstrap 4 Support

    As of 10 Aug 2017 Bootstrap 4 has moved from "Alpha" to "Beta".

    This should bring the stability we've been missing:

    Long story short, shipping a beta means we’re done breaking all your stuff until our next major version (v5). We’re not perfect, but we’ll be doing our best to keep all the classes, features, and docs URLs as they appear now in this release. — Announcement Blog Post

    I'm not using Bootstrap myself currently — so I need help with this!

    I'm going to close all other bootstrap 4 issues and will take PRs Ref #732 helping to bring the Bootstrap 4 support up to scratch.

    I'm planning a new release of Crispy Forms in the Autumn — before Django 2.0. If we get good input here I will bring that forward.

    Thanks for the input everyone!

    Improvement/Feature Help Wanted 
    opened by carltongibson 19
  • Memoize wrapper is deprecated in Django 1.8

    Memoize wrapper is deprecated in Django 1.8

    /home/paurullan/.virtualenvs/professionals/lib/python3.4/
      site-packages/crispy_forms/utils.py:25: 
    RemovedInDjango19Warning: 
    memoize wrapper is deprecated and will be removed in Django 1.9.
     Use django.utils.lru_cache instead.
      default_field_template = memoize(default_field_template, {}, 1)
    
    opened by paurullan 19
  • With current bootstrap4 implementation

    With current bootstrap4 implementation "vertical" form is impossbile.

    This commit https://github.com/maraujop/django-crispy-forms/commit/a9477f115261be41a07f8aed34aa63b97db4cbb0 hardcodes classnames that from my perspective are soling edgecase. There are multiple issues with this:

    1. Broken defaults. Just enabling bootstrap4 templatepack will produce broken forms. Since for horizontal form to work classes for label and field width are expected.
    2. Shoudn't "vertical" form be default? From bootstrap perspective it seems so.
    3. It's impossible to produce "vertical" form at all (you have to override most of the templates)

    I'd be happy to fix this, but i'm not very familar with crispy forms. I think the right way to do this would be to add class somewhere conditionally depending on form_style, like its done with form-control?

    opened by shulcsm 18
  • Add support for Bootstrap 3 templates

    Add support for Bootstrap 3 templates

    Bootstrap is going into RC for version 3. It contains some minor modifications to the the form template structure, noticeably how horizontal forms are rendered (they now use the grid layout system).

    opened by jamesmfriedman 18
  • TypeError unhashable type: 'dict'

    TypeError unhashable type: 'dict'

    After upgrading from 1.2.7 to 1.2.8, I receive an error message when calling:

    {% crispy form %}

    crispy_forms/base.py in enter, line 25

    Traceback: File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response

    1.                     response = callback(request, _callback_args, *_callback_kwargs)
      
      File "/Users/Bryan/DjangoWorkspace/BioCrowd/BioCrowd/apps/registration/views.py" in register
    2. return render_to_response('register.djhtml', context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/shortcuts/init.py" in render_to_response
    3. return HttpResponse(loader.render_to_string(_args, *_kwargs), **httpresponse_kwargs)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
    4.     return t.render(Context(dictionary))
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/base.py" in render
    5.         return self._render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
    6. return self.nodelist.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/base.py" in render
    7.             bit = self.render_node(node, context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/debug.py" in render_node
    8.         return node.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/loader_tags.py" in render
    9.     return compiled_parent._render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
    10. return self.nodelist.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/base.py" in render
    11.             bit = self.render_node(node, context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/debug.py" in render_node
    12.         return node.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/loader_tags.py" in render
    13.     return compiled_parent._render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
    14. return self.nodelist.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/base.py" in render
    15.             bit = self.render_node(node, context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/debug.py" in render_node
    16.         return node.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/loader_tags.py" in render
    17.         result = block.nodelist.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/base.py" in render
    18.             bit = self.render_node(node, context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/debug.py" in render_node
    19.         return node.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/loader_tags.py" in render
    20.         result = block.nodelist.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/base.py" in render
    21.             bit = self.render_node(node, context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/debug.py" in render_node
    22.         return node.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/loader_tags.py" in render
    23.         result = block.nodelist.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/base.py" in render
    24.             bit = self.render_node(node, context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/django/template/debug.py" in render_node
    25.         return node.render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/crispy_forms/templatetags/crispy_forms_tags.py" in render
    26.     c = self.get_render(context)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/crispy_forms/templatetags/crispy_forms_tags.py" in get_render
    27.             actual_form.form_html = helper.render_layout(actual_form, node_context, template_pack=self.template_pack)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/crispy_forms/helper.py" in render_layout
    28.                               template_pack=template_pack)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/crispy_forms/layout.py" in render
    29.                              context, template_pack=template_pack)
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/crispy_forms/utils.py" in render_field
    30. with KeepContext(context):
      
      File "/Users/Bryan/PythonEnvs/BioCrowd/lib/python2.7/site-packages/crispy_forms/base.py" in enter
    31.     self.old_set_keys = set(from_iterable(self.context.dicts))
      

    Exception Type: TypeError at /account/register/ Exception Value: unhashable type: 'dict'

    opened by bxm156 18
  • Usability of FileField in bootstrap4

    Usability of FileField in bootstrap4

    Use custom template for FileInput along the vanilla JS making it fully functional.

    Use django template for widget ClearableFileInput which is used when the form is a ModelForm (see https://github.com/django-crispy-forms/django-crispy-forms/issues/918#issuecomment-545382695)

    opened by bryan-brancotte 17
  • 'update_attributes' method for non field layout doesn't work

    'update_attributes' method for non field layout doesn't work

    • Package version: 1.14.0
    • Django version: 4.1.3
    • Python version: 3.10.4
    • Template pack: bootstrap5

    Description:

    Hello,

    Your update_attributes method seems great when you want to change attributes on the go, but it only works for Field layout. For instance, if I want to change an attribute for a BaseInput layout, nothing happens. However, if I applied it to a Field layout, it works.

    Could you improve the update_attributes method ? It would be great.

    What would be better is to have this method for any Layout object, not only for LayoutSlice object.

    opened by Sulfyderz 0
  • Selecting layout objects with slices doesn't work ('LayoutSlice' object is not subscriptable)

    Selecting layout objects with slices doesn't work ('LayoutSlice' object is not subscriptable)

    • Package version: 1.14.0
    • Django version: 4.1.3
    • Python version: 3.10.4
    • Template pack: bootstrap5

    Description:

    Hello,

    There is a bug with the helper when we want to update the layout on the go. I have this layout in my form __init__ method:

    self.helper.layout = Layout(
                Div(
                    Div(
                        HTML('<ul id="ul-id-member">'),
                        HTML("</ul>"),
                        BaseInput(
                            "input-member",
                            "",
                            css_id="input-id-member",
                            hx_include="#ul-id-member",
                            hx_target="#member-suggestions",
                            hx_trigger="focus changed, newMemberSearch from:body delay:200ms",
                            hx_swap="innerHTML",
                            hx_get="",
                        ),
                        css_class="member-tag",
                    ),
                    HTML('<ol id="member-suggestions" class="member-suggestions"></ol>'),
                    css_class="member-invite",
                ),
                Field("role", id="select-id-role"),
                Submit("invite", "Invite"),
                Button("cancel", "Cancel"),
            )
    

    I would like to access the BaseInput as described in the doc. Unfortunately, it doesn't work at all. When I try form.helper[0][0][-1] in my view, Python tells me that TypeError: 'LayoutSlice' object is not subscriptable.

    Not sure, but I think it's a bug. Could you help me ?

    opened by Sulfyderz 0
  • Context awareness of `flat_attrs`

    Context awareness of `flat_attrs`

    • Package version: 1.14.0
    • Django version: 4.1.2
    • Python version: 3.9.14
    • Template pack: bootstrap5

    Description:

    The flattened attributes are not context aware. This prevents us from using context aware strings in e.g. Button's href.

    For instance, in the following:

        self.helper.layout = Layout(
                ...,
                FormActions(
                    ...,
                    Button(name = 'cancel', value = 'Annuler', css_class = 'btn btn-warning w-100',href = "{{ cancel_url }}",),
                    # Use the crispy formactions template instead of the crispy-bootstrap5 one
                    template = 'bootstrap/layout/formactions.html',
                    css_class = 'row',
                ),
            )
    

    the href field is rendered as href="{{ cancel_url }} in the HTML output.

    opened by romintomasetti 2
  • Use Jinja2 `static()` function in `HTML()`

    Use Jinja2 `static()` function in `HTML()`

    • Package version: 1.10.0
    • Django version: 3.2.14
    • Python version: 3.9.11

    Description:

    I'm trying to load a static image within an HTML() section of a crispy layout, using something like:

    HTML("""
      <img src="{{ static('image.jpg') }}">
    """)
    

    Crispy is being rendered with Jinja2, using:

    @pass_context
    def crispy(context, form):
        return render_crispy_form(form, context=context)
    

    This throws the following exception:

       File "/var/www/html/project/jinja2.py", line 20, in crispy
         return render_crispy_form(form, context=context)
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/utils.py", line 170, in render_crispy_form
         return node.render(node_context)
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/templatetags/crispy_forms_tags.py", line 203, in render
         c = self.get_render(context).flatten()
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/templatetags/crispy_forms_tags.py", line 119, in get_render
         actual_form.form_html = helper.render_layout(
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/helper.py", line 301, in render_layout
         html = self.layout.render(form, self.form_style, context, template_pack=template_pack)
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/layout.py", line 135, in render
         return self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/layout.py", line 96, in get_rendered_fields
         return "".join(
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/layout.py", line 97, in <genexpr>
         render_field(field, form, form_style, context, template_pack=template_pack, **kwargs)
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/utils.py", line 66, in render_field
         return field.render(form, form_style, context, template_pack=template_pack)
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/layout.py", line 367, in render
         fields = self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/layout.py", line 96, in get_rendered_fields
         return "".join(
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/layout.py", line 97, in <genexpr>
         render_field(field, form, form_style, context, template_pack=template_pack, **kwargs)
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/utils.py", line 66, in render_field
         return field.render(form, form_style, context, template_pack=template_pack)
       File "/opt/venv/lib/python3.9/site-packages/crispy_forms/layout.py", line 413, in render
         return Template(str(self.html)).render(context)
       File "/opt/venv/lib/python3.9/site-packages/django/template/base.py", line 155, in __init__
         self.nodelist = self.compile_nodelist()
       File "/opt/venv/lib/python3.9/site-packages/django/template/base.py", line 193, in compile_nodelist
         return parser.parse()
       File "/opt/venv/lib/python3.9/site-packages/django/template/base.py", line 449, in parse
         raise self.error(token, e)
       File "/opt/venv/lib/python3.9/site-packages/django/template/base.py", line 447, in parse
         filter_expression = self.compile_filter(token.contents)
       File "/opt/venv/lib/python3.9/site-packages/django/template/base.py", line 563, in compile_filter
         return FilterExpression(token, self)
       File "/opt/venv/lib/python3.9/site-packages/django/template/base.py", line 662, in __init__
         raise TemplateSyntaxError("Could not parse the remainder: '%s' "
     django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: '('image.jpg')' from 'static('image.jpg')'
    

    Thanks so much!

    opened by anderoonies 0
  • Issue rendering submit button with 'btn btn-outline-primary' class

    Issue rendering submit button with 'btn btn-outline-primary' class

    • Package version: 1.14.0
    • Django version: 4.0.5
    • Python version: 3.10.2
    • Template pack: bootstrap4

    Description:

    I am trying to style a Submit button with a css_class of btn btn-outline-primary from Boostrap4.

    However, when I pass css_class='btn btn-outline-primary' into a Submit button, the rendered result is not as expected.

    It appears that both the primary and primary outline classes are being rendered on top of each other.

    This seems to be related to the following where the css_class is defaulted to btn btn-primary and the css_class passed into Submit is appended to it.

    https://github.com/django-crispy-forms/django-crispy-forms/blob/1.14.0/crispy_forms/layout.py#L213 https://github.com/django-crispy-forms/django-crispy-forms/blob/1.14.0/crispy_forms/layout.py#L183-L184

    Thanks!

    Preferably also include:

    • [x] Example Django Crispy Forms code
    from crispy_forms.layout import Submit
    
    Submit(
        'submit',
        'Save',
        css_class='btn btn-outline-primary',
    )
    
    • [x] Screenshots

    Result image

    Expected image

    • [x] Actual HTML generated
    <input type="submit" name="submit" value="Save" class="btn btn-primary btn btn-outline-primary" id="submit-id-submit">
    
    • [x] Expected HTML
    <input type="submit" name="submit" value="Save" class="btn btn-outline-primary" id="submit-id-submit">
    
    opened by pedantic-curmudgeon 0
Releases(1.14.0)
  • 1.14.0(Jan 25, 2022)

    What's Changed

    • Updated meta license-file in setup.cfg by @smithdc1 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1188
    • Remove bs3 styles from crispy_forms_field by @smithdc1 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1003
    • Fix css id for non ascii characters by @smithdc1 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1190
    • Simplified adding wrapper_class to context when rendering PrependedApppendedText by @smithdc1 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1191
    • Added support for Python 3.10 by @smithdc1 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1189
    • Refs #938 -- Avoid attributes being duplicated by @smithdc1 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1194
    • Fix mismatched HTML tag by @wgordon17 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1201
    • Dropped support for Python 3.6 and Django 3.1. by @smithdc1 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1205
    • Fixed Bootstrap4 Field with buttons input size by @smithdc1 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1159
    • Removed empty class attribute if field class is None by @smithdc1 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1208
    • Create a bootstrap modal layout object by @nsandler1 in https://github.com/django-crispy-forms/django-crispy-forms/pull/1204

    New Contributors

    • @wgordon17 made their first contribution in https://github.com/django-crispy-forms/django-crispy-forms/pull/1201
    • @nsandler1 made their first contribution in https://github.com/django-crispy-forms/django-crispy-forms/pull/1204

    Full Changelog: https://github.com/django-crispy-forms/django-crispy-forms/compare/1.13.0...1.14.0

    Source code(tar.gz)
    Source code(zip)
  • 1.13.0(Sep 25, 2021)

  • 1.12.0(Jun 11, 2021)

    • Fixed rendering of grouped checkboxes and radio inputs in the Bootstrap 4 template pack. (#1155)
    • Introduced new input_size argument to AppendedText, PrependedText and PrependedAppendedText. This allows the size of these grouped inputs to be changed in the Bootstrap 4 template pack. (#1114)
    • Confirmed support for Django 3.2
    • Dropped support for Python 3.5
    • Dropped support for Django 3.0

    See the 1.12.0 Milestone for the full change list.

    Source code(tar.gz)
    Source code(zip)
  • 1.11.2(Mar 21, 2021)

  • 1.11.1(Feb 21, 2021)

  • 1.11.0(Jan 30, 2021)

  • 1.10.0(Nov 18, 2020)

    1.10.0 (18.11.2020)

    • Fixed test causing SystemCheckError in some cases. (#1075)
    • Radio and Checkbox now respect the field's disabled attribute when using the Bootstrap4 template pack. (#1057)
    • A number of documentation improvements.

    See the 1.10.0 Milestone for the full change list

    Source code(tar.gz)
    Source code(zip)
  • 1.9.2(Jul 11, 2020)

  • 1.9.1(May 16, 2020)

  • 1.9.0(Feb 28, 2020)

    • Removed support for Python 2.
    • Removed support for Django versions prior to 2.2.
    • CSS for Column layout object in Bootstrap 4 template pack changed to 'col-md'. Default is now over ridden when another 'col' class is added to css_class.

    See the 1.9.0 Milestone for the full change list.

    Source code(tar.gz)
    Source code(zip)
  • 1.8.1(Nov 22, 2019)

    1.8.1 (2019-11-22)

    • Fixing FileField UI bug introduced with 1.8.0
    • Remove is-valid css class for radio (bug introduced with 1.8.0)
    • Various alignment and margin fixes for Bootstrap 4 template pack
    • Documentation : using read-the-docs template, documenting how to run test suite, documenting use_custom_control help attributes
    Source code(tar.gz)
    Source code(zip)
  • 1.8.0(Oct 17, 2019)

    1.8.0 (2019-10-17)

    See the 1.8.0 Milestone for the full change list.

    Source code(tar.gz)
    Source code(zip)
  • 1.7.2(Mar 9, 2018)

  • 1.7.1(Mar 5, 2018)

  • 1.7.0(Oct 17, 2017)

  • 1.6.1(Oct 17, 2016)

  • 1.6.0(Jan 7, 2016)

    Adds Bootstrap 4 template pack. Improves compatibility with Django 1.9. Other small fixes.

    Full changes: https://github.com/maraujop/django-crispy-forms/compare/1.5.2...1.6.0

    Recommended.

    Source code(tar.gz)
    Source code(zip)
  • 1.5.2(Sep 10, 2015)

  • 1.5.1(Aug 21, 2015)

  • 1.5.0(Aug 16, 2015)

    The highlights here are compatibility with Python 3 and all currently supported versions of Django (1.4, 1.7, 1.8). We've also extended the CI coverage to all supported Python/Django combinations and are running against Django master to pick up future problems early.

    Source code(tar.gz)
    Source code(zip)
Automatic caching and invalidation for Django models through the ORM.

Cache Machine Cache Machine provides automatic caching and invalidation for Django models through the ORM. For full docs, see https://cache-machine.re

846 Nov 26, 2022
Integarting Celery with Django to asynchronous tasks 📃

Integrating 🔗 Celery with Django via Redis server ,To-Do asynchronously 👀task without stopping the main-flow 📃 of Django-project . It increase your speed 🚀 and user experience 🤵 of website

Rushi Patel 4 Jul 15, 2022
Serve files with Django.

django-downloadview django-downloadview makes it easy to serve files with Django: you manage files with Django (permissions, filters, generation, ...)

Jazzband 328 Dec 07, 2022
A app for managing lessons with Django

Course Notes A app for managing lessons with Django Some Ideas

Motahhar.Mokfi 6 Jan 28, 2022
Django/Jinja template indenter

DjHTML A pure-Python Django/Jinja template indenter without dependencies. DjHTML is a fully automatic template indenter that works with mixed HTML/CSS

Return to the Source 378 Jan 01, 2023
A BitField extension for Django Models

django-bitfield Provides a BitField like class (using a BigIntegerField) for your Django models. (If you're upgrading from a version before 1.2 the AP

DISQUS 361 Dec 22, 2022
An extremely fast JavaScript and CSS bundler and minifier

Website | Getting started | Documentation | Plugins | FAQ Why? Our current build tools for the web are 10-100x slower than they could be: The main goa

Evan Wallace 34.2k Jan 04, 2023
A simple Django dev environment setup with docker for demo purposes for GalsenDev community

GalsenDEV Docker Demo This is a basic Django dev environment setup with docker and docker-compose for a GalsenDev Meetup. The main purposes was to mak

3 Jul 03, 2021
A simple E-commerce shop made with Django and Bulma

Interiorshop A Simple E-Commerce app made with Django Instructions Make sure you have python installed Step 1. Open a terminal Step 2. Paste the given

Aditya Priyadarshi 3 Sep 03, 2022
A test microblog project created using Django 4.0

django-microblog This is a test microblog project created using Django 4.0. But don't worry this is a fully working project. There is no super-amazing

Ali Kasimoglu 8 Jan 14, 2022
Pinax is an open-source platform built on the Django Web Framework.

Symposion Pinax Pinax is an open-source platform built on the Django Web Framework. It is an ecosystem of reusable Django apps, themes, and starter pr

Pinax Project 295 Mar 20, 2022
📊📈 Serves up Pandas dataframes via the Django REST Framework for use in client-side (i.e. d3.js) visualizations and offline analysis (e.g. Excel)

Django REST Pandas Django REST Framework + pandas = A Model-driven Visualization API Django REST Pandas (DRP) provides a simple way to generate and se

wq framework 1.2k Jan 01, 2023
A visual indicator of what environment/system you're using in django

A visual indicator of what environment/system you're using in django

Mark Walker 4 Nov 26, 2022
Django-pwned - A collection of django password validators

Django Pwned A collection of django password validators. Compatibility Python: 3

Quera 22 Jun 27, 2022
Full control of form rendering in the templates.

django-floppyforms Full control of form rendering in the templates. Authors: Gregor Müllegger and many many contributors Original creator: Bruno Renié

Jazzband 811 Dec 01, 2022
Resolve form field arguments dynamically when a form is instantiated

django-forms-dynamic Resolve form field arguments dynamically when a form is instantiated, not when it's declared. Tested against Django 2.2, 3.2 and

DabApps 108 Jan 03, 2023
Easy thumbnails for Django

Easy Thumbnails A powerful, yet easy to implement thumbnailing application for Django 1.11+ Below is a quick summary of usage. For more comprehensive

Chris Beaven 1.3k Dec 30, 2022
Plug and play continuous integration with django and jenkins

django-jenkins Plug and play continuous integration with Django and Jenkins Installation From PyPI: $ pip install django-jenkins Or by downloading th

Mikhail Podgurskiy 941 Oct 22, 2022
Neighbourhood - A python-django web app to help the residence of a given neighborhood know their surrounding better

Neighbourhood A python-django web app to help the residence of a given neighborh

Levy Omolo 4 Aug 25, 2022
A Django based shop system

django-SHOP Django-SHOP aims to be a the easy, fun and fast e-commerce counterpart to django-CMS. Here you can find the full documentation for django-

Awesto 2.9k Dec 30, 2022