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)
A blog app powered by python-django

Django_BlogApp This is a blog app powered by python-django Features Add and delete blog post View someone else blog Can add comment to that blog And o

Manish Jalui 1 Sep 12, 2022
Django API creation with signed requests utilizing forms for validation.

django-formapi Create JSON API:s with HMAC authentication and Django form-validation. Version compatibility See Travis-CI page for actual test results

5 Monkeys 34 Apr 04, 2022
Example project demonstrating using Django’s test runner with Coverage.py

Example project demonstrating using Django’s test runner with Coverage.py Set up with: python -m venv --prompt . venv source venv/bin/activate python

Adam Johnson 5 Nov 29, 2021
TinyMCE integration for Django

django-tinymce django-tinymce is a Django application that contains a widget to render a form field as a TinyMCE editor. Quickstart Install django-tin

Jazzband 1.1k Dec 26, 2022
Zendesk Assignment - Django Based Ticket Viewer

Zendesk-Coding-Challenge Django Based Ticket Viewer The assignment has been made using Django. Important methods have been scripted in views.py. Excep

Akash Sampurnanand Pandey 0 Dec 23, 2021
Notes-Django: an advanced project to save notes in Django. where users are able to Create, Read, Update and Delete their notes.

An advanced software to keep you notes. It allows users to perform CRUD operations on theirs Notes. Was implemented Authorization and Authentication

Edilson Pateguana 1 Feb 05, 2022
mirage ~ ♪ extended django admin or manage.py command.

mirage ~ ♪ extended django admin or manage.py command. ⬇️ Installation Installing Mirage with Pipenv is recommended. pipenv install -d mirage-django-l

Shota Shimazu 6 Feb 14, 2022
📝 Sticky Notes in Django admin

django-admin-sticky-notes Share notes between superusers. Installation Install via pip: pip install django_admin_sticky_notes Put django_admin_sticky_

Dariusz Choruży 7 Oct 06, 2021
A Django app to initialize Sentry client for your Django applications

Dj_sentry This Django application intialize Sentry SDK to your Django application. How to install You can install this packaging by using: pip install

Gandi 1 Dec 09, 2021
A Django Online Library Management Project.

Why am I doing this? I started learning 📖 Django few months back, and this is a practice project from MDN Web Docs that touches the aspects of Django

1 Nov 13, 2021
The friendly PIL fork (Python Imaging Library)

Pillow Python Imaging Library (Fork) Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lund

Pillow 10.4k Jan 03, 2023
Tools to easily create permissioned CRUD endpoints in graphene-django.

graphene-django-plus Tools to easily create permissioned CRUD endpoints in graphene-django. Install pip install graphene-django-plus To make use of ev

Zerosoft 74 Aug 09, 2022
Running in outer Django project folder (cd django_project)

Django Running in outer Django project folder (cd django_project) Make Migrations python manage.py makemigrations Migrate to Database python manage.py

1 Feb 07, 2022
A simple djagno music website.

Mrock A simple djagno music website. I used this template and I translated it to eng. Also some changes commited. My Live Domo : https://mrock.pythona

Hesam N 1 Nov 30, 2021
Getdp-project - A Django-built web app that generates a personalized banner of events to come

getdp-project https://get-my-dp.herokuapp.com/ A Django-built web app that gener

CODE 4 Aug 01, 2022
Media-Management with Grappelli

Django FileBrowser Media-Management with Grappelli. The FileBrowser is an extension to the Django administration interface in order to: browse directo

Patrick Kranzlmueller 913 Dec 28, 2022
Updates redisearch instance with igdb data used for kimosabe

igdb-pdt Update RediSearch with IGDB games data in the following Format: { "game_slug": { "name": "game_name", "cover": "igdb_coverart_url",

6rotoms 0 Jul 30, 2021
A Django web application that allows you to be in the loop about everything happening in your neighborhood.

A Django web application that allows you to be in the loop about everything happening in your neighborhood. From contact information of different handyman to meeting announcements or even alerts.

Kennedy Ngugi Mwaura 3 Dec 11, 2022
django CMS Association 1.6k Jan 06, 2023
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