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)
Cached file system for online resources in Python

Minato Cache & file system for online resources in Python Features Minato enables you to: Download & cache online recsources minato supports the follo

Yasuhiro Yamaguchi 10 Jan 04, 2023
A Django GraphQL (Graphene) base template

backend A Django GraphQL (Graphene) base template Make sure your IDE/Editor has Black and EditorConfig plugins installed; and configure it lint file a

Reckonsys 4 May 25, 2022
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
An automatic django's update checker and MS teams notifier

Django Update Checker This is small script for checking any new updates/bugfixes/security fixes released in django News & Events and sending correspon

prinzpiuz 4 Sep 26, 2022
REST API with Django and SQLite3

REST API with Django and SQLite3

Luis Quiñones Requelme 1 Nov 07, 2021
Django Fett is an incomplete code generator used on several projects

Django Fett Django Fett is an incomplete code generator used on several projects. This is an attempt to clean it up and make it public for consumption

Jeff Triplett 6 Dec 31, 2021
Djangoblog - A blogging platform built on Django and Python.

djangoblog 👨‍💻 A blogging platform built on Django and Python

Lewis Gentle 1 Jan 10, 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
A modern looking portfolio build with Django.

Django Portfolio A portfolio template using html/css/js in the frontend and Django as the backend framework. Cool features: smooth scrolling responsiv

1 Jan 19, 2022
Use minify-html, the extremely fast HTML + JS + CSS minifier, with Django.

django-minify-html Use minify-html, the extremely fast HTML + JS + CSS minifier, with Django. Requirements Python 3.8 to 3.10 supported. Django 2.2 to

Adam Johnson 60 Dec 28, 2022
A set of high-level abstractions for Django forms

django-formtools Django's "formtools" is a set of high-level abstractions for Django forms. Currently for form previews and multi-step forms. This cod

Jazzband 621 Dec 30, 2022
Intellicards-backend - A Django project bootstrapped with django-admin startproject mysite

Intellicards-backend - A Django project bootstrapped with django-admin startproject mysite

Fabrizio Torrico 2 Jan 13, 2022
English dictionary using Django based on freecodecamp

English Dictionary Hi there, i made this english dictionary using Django based on freecodecamp.org tutorial :) Table of Contents Preview Technologies

Aline Alencar 3 May 09, 2022
Add Chart.js visualizations to your Django admin using a mixin class

django-admincharts Add Chart.js visualizations to your Django admin using a mixin class. Example from django.contrib import admin from .models import

Dropseed 22 Nov 22, 2022
A simple Blog Using Django Framework and Used IBM Cloud Services for Text Analysis and Text to Speech

ElhamBlog Cloud Computing Course first assignment. A simple Blog Using Django Framework and Used IBM Cloud Services for Text Analysis and Text to Spee

Elham Razi 5 Dec 06, 2022
:couple: Multi-user accounts for Django projects

django-organizations Summary Groups and multi-user account management Author Ben Lopatin (http://benlopatin.com / https://wellfire.co) Status Separate

Ben Lopatin 1.1k Jan 01, 2023
Django-pwned - A collection of django password validators

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

Quera 22 Jun 27, 2022
An airlines clone website with django

abc_airlines is a clone website of an airlines system the way it works is that first you add flights to the website then the users can search flights

milad 1 Nov 16, 2021
Add infinite scroll to any django app.

django-infinite-scroll Add infinite scroll to any django app. Features - Allows to add infinite scroll to any page.

Gustavo Teixeira 1 Dec 26, 2021
A Django app for working with BTCPayServer

btcpay-django A Django app for working with BTCPayServer Installation pip install btcpay-django Developers Release To cut a release, run bumpversion,

Crawford 3 Nov 20, 2022