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)
Django API that scrapes and provides the last news of the city of Carlos Casares by semantic way (RDF format).

"Casares News" API Api that scrapes and provides the last news of the city of Carlos Casares by semantic way (RDF format). Usage Consume the articles

Andrés Milla 6 May 12, 2022
Django-Text-to-HTML-converter - The simple Text to HTML Converter using Django framework

Django-Text-to-HTML-converter This is the simple Text to HTML Converter using Dj

Nikit Singh Kanyal 6 Oct 9, 2022
Django project starter on steroids: quickly create a Django app AND generate source code for data models + REST/GraphQL APIs (the generated code is auto-linted and has 100% test coverage).

Create Django App ?? We're a Django project starter on steroids! One-line command to create a Django app with all the dependencies auto-installed AND

imagine.ai 68 Oct 19, 2022
Twitter Bootstrap for Django Form - A simple Django template tag to work with Bootstrap

Twitter Bootstrap for Django Form - A simple Django template tag to work with Bootstrap

tzangms 557 Oct 19, 2022
A prettier way to see Django requests while developing

A prettier way to see Django requests while developing

Adam Hill 35 Dec 2, 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 Django application that provides country choices for use with forms, flag icons static files, and a country field for models.

Django Countries A Django application that provides country choices for use with forms, flag icons static files, and a country field for models. Insta

Chris Beaven 1.2k Jan 7, 2023
A Django application that provides country choices for use with forms, flag icons static files, and a country field for models.

Django Countries A Django application that provides country choices for use with forms, flag icons static files, and a country field for models. Insta

Chris Beaven 1.2k Dec 31, 2022
django-reversion is an extension to the Django web framework that provides version control for model instances.

django-reversion django-reversion is an extension to the Django web framework that provides version control for model instances. Requirements Python 3

Dave Hall 2.8k Jan 2, 2023
An app that allows you to add recipes from the dashboard made using DJango, JQuery, JScript and HTMl.

An app that allows you to add recipes from the dashboard. Then visitors filter based on different categories also each ingredient has a unique page with their related recipes.

Pablo Sagredo 1 Jan 31, 2022
A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for quickly creating new images from the one assigned to the field.

django-versatileimagefield A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creat

Jonathan Ellenberger 490 Dec 13, 2022
The Django Leaflet Admin List package provides an admin list view featured by the map and bounding box filter for the geo-based data of the GeoDjango.

The Django Leaflet Admin List package provides an admin list view featured by the map and bounding box filter for the geo-based data of the GeoDjango. It requires a django-leaflet package.

Vsevolod Novikov 33 Nov 11, 2022
Django-Audiofield is a simple app that allows Audio files upload, management and conversion to different audio format (mp3, wav & ogg), which also makes it easy to play audio files into your Django application.

Django-Audiofield Description: Django Audio Management Tools Maintainer: Areski Contributors: list of contributors Django-Audiofield is a simple app t

Areski Belaid 167 Nov 10, 2022
django-quill-editor makes Quill.js easy to use on Django Forms and admin sites

django-quill-editor django-quill-editor makes Quill.js easy to use on Django Forms and admin sites No configuration required for static files! The ent

lhy 139 Dec 5, 2022
This is a template tag project for django to calculate in templates , enjoy it

Calculator-Template-Django this is a template tag project for django to calculate in templates , enjoy it Get Started : 1 - Download Source Code 2 - M

null 1 Feb 1, 2022
Cookiecutter Django is a framework for jumpstarting production-ready Django projects quickly.

Cookiecutter Django Powered by Cookiecutter, Cookiecutter Django is a framework for jumpstarting production-ready Django projects quickly. Documentati

Daniel Feldroy 10k Dec 31, 2022
django-tables2 - An app for creating HTML tables

django-tables2 - An app for creating HTML tables django-tables2 simplifies the task of turning sets of data into HTML tables. It has native support fo

Jan Pieter Waagmeester 1.6k Jan 3, 2023
Django-shared-app-isolated-databases-example - Django - Shared App & Isolated Databases

Django - Shared App & Isolated Databases An app that demonstrates the implementa

Ajai Danial 5 Jun 27, 2022
Django URL Shortener is a Django app to to include URL Shortening feature in your Django Project

Django URL Shortener Django URL Shortener is a Django app to to include URL Shortening feature in your Django Project Install this package to your Dja

Rishav Sinha 4 Nov 18, 2021