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=master

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.0 and 3.1 with Python 3.5+. Note: Django 3.1 requires `django-crispy-forms` version 1.9 or higher.

Versions of django-crispy-forms prior to 1.9.0 also supported Python 2.7 and Django 1.11/2.1

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
  • Move project setup to pyproject.toml and build package with

    Move project setup to pyproject.toml and build package with "build".

    When I first started working on this both python -m build and check-manifest were raising multiple errors.

    I've now moved the setup to pyproject.toml inline with the current python packaging tutorial [1]. Updating the manifest.in file was also needed to ensure that all the correct files are included, and also to exclude others (e.g. __pycache__).

    Here is the output of running python -m build locally.

    * Creating virtualenv isolated environment...
    * Installing packages in isolated environment... (setuptools>=61.0)
    * Getting build dependencies for sdist...
    C:\Users\smith\AppData\Local\Temp\build-env-6sev9jtg\Lib\site-packages\setuptools\config\setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_fil
    es instead.
      warnings.warn(msg, warning_class)
    C:\Users\smith\AppData\Local\Temp\build-env-6sev9jtg\Lib\site-packages\setuptools\config\pyprojecttoml.py:108: _BetaConfiguration: Support for `[tool.setuptools]` in `pyproject.toml` is still *
    beta*.
      warnings.warn(msg, _BetaConfiguration)
    No `packages` or `py_modules` configuration, performing automatic discovery.
    `flat-layout` detected -- analysing .
    discovered packages -- ['crispy_forms', 'crispy_forms.templatetags']
    running egg_info
    writing django_crispy_forms.egg-info\PKG-INFO
    writing dependency_links to django_crispy_forms.egg-info\dependency_links.txt
    writing requirements to django_crispy_forms.egg-info\requires.txt
    writing top-level names to django_crispy_forms.egg-info\top_level.txt
    reading manifest file 'django_crispy_forms.egg-info\SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    adding license file 'LICENSE.txt'
    writing manifest file 'django_crispy_forms.egg-info\SOURCES.txt'
    * Building sdist...
    C:\Users\smith\AppData\Local\Temp\build-env-6sev9jtg\Lib\site-packages\setuptools\config\setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_fil
    es instead.
      warnings.warn(msg, warning_class)
    C:\Users\smith\AppData\Local\Temp\build-env-6sev9jtg\Lib\site-packages\setuptools\config\pyprojecttoml.py:108: _BetaConfiguration: Support for `[tool.setuptools]` in `pyproject.toml` is still *
    beta*.
      warnings.warn(msg, _BetaConfiguration)
    No `packages` or `py_modules` configuration, performing automatic discovery.
    `flat-layout` detected -- analysing .
    discovered packages -- ['crispy_forms', 'crispy_forms.templatetags']
    running sdist
    running egg_info
    writing django_crispy_forms.egg-info\PKG-INFO
    writing dependency_links to django_crispy_forms.egg-info\dependency_links.txt
    writing requirements to django_crispy_forms.egg-info\requires.txt
    writing top-level names to django_crispy_forms.egg-info\top_level.txt
    reading manifest file 'django_crispy_forms.egg-info\SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    adding license file 'LICENSE.txt'
    writing manifest file 'django_crispy_forms.egg-info\SOURCES.txt'
    running check
    creating django-crispy-forms-2.0
    creating django-crispy-forms-2.0\crispy_forms
    creating django-crispy-forms-2.0\crispy_forms\templatetags
    creating django-crispy-forms-2.0\django_crispy_forms.egg-info
    creating django-crispy-forms-2.0\docs
    creating django-crispy-forms-2.0\docs\_templates
    creating django-crispy-forms-2.0\docs\images
    creating django-crispy-forms-2.0\requirements
    creating django-crispy-forms-2.0\tests
    creating django-crispy-forms-2.0\tests\results
    creating django-crispy-forms-2.0\tests\results\bootstrap
    creating django-crispy-forms-2.0\tests\results\bootstrap\test_layout_objects
    creating django-crispy-forms-2.0\tests\templates
    copying files to django-crispy-forms-2.0...
    copying .editorconfig -> django-crispy-forms-2.0
    copying .pre-commit-config.yaml -> django-crispy-forms-2.0
    copying CHANGELOG.md -> django-crispy-forms-2.0
    copying CONTRIBUTORS.txt -> django-crispy-forms-2.0
    copying LICENSE.txt -> django-crispy-forms-2.0
    copying MANIFEST.in -> django-crispy-forms-2.0
    copying Makefile -> django-crispy-forms-2.0
    copying README.rst -> django-crispy-forms-2.0
    copying pyproject.toml -> django-crispy-forms-2.0
    copying requirements.txt -> django-crispy-forms-2.0
    copying setup.cfg -> django-crispy-forms-2.0
    copying tox.ini -> django-crispy-forms-2.0
    copying crispy_forms\LICENSE -> django-crispy-forms-2.0\crispy_forms
    copying crispy_forms\__init__.py -> django-crispy-forms-2.0\crispy_forms
    copying crispy_forms\base.py -> django-crispy-forms-2.0\crispy_forms
    copying crispy_forms\bootstrap.py -> django-crispy-forms-2.0\crispy_forms
    copying crispy_forms\exceptions.py -> django-crispy-forms-2.0\crispy_forms
    copying crispy_forms\helper.py -> django-crispy-forms-2.0\crispy_forms
    copying crispy_forms\layout.py -> django-crispy-forms-2.0\crispy_forms
    copying crispy_forms\layout_slice.py -> django-crispy-forms-2.0\crispy_forms
    copying crispy_forms\utils.py -> django-crispy-forms-2.0\crispy_forms
    copying crispy_forms\templatetags\__init__.py -> django-crispy-forms-2.0\crispy_forms\templatetags
    copying crispy_forms\templatetags\crispy_forms_field.py -> django-crispy-forms-2.0\crispy_forms\templatetags
    copying crispy_forms\templatetags\crispy_forms_filters.py -> django-crispy-forms-2.0\crispy_forms\templatetags
    copying crispy_forms\templatetags\crispy_forms_tags.py -> django-crispy-forms-2.0\crispy_forms\templatetags
    copying crispy_forms\templatetags\crispy_forms_utils.py -> django-crispy-forms-2.0\crispy_forms\templatetags
    copying django_crispy_forms.egg-info\PKG-INFO -> django-crispy-forms-2.0\django_crispy_forms.egg-info
    copying django_crispy_forms.egg-info\SOURCES.txt -> django-crispy-forms-2.0\django_crispy_forms.egg-info
    copying django_crispy_forms.egg-info\dependency_links.txt -> django-crispy-forms-2.0\django_crispy_forms.egg-info
    copying django_crispy_forms.egg-info\requires.txt -> django-crispy-forms-2.0\django_crispy_forms.egg-info
    copying django_crispy_forms.egg-info\top_level.txt -> django-crispy-forms-2.0\django_crispy_forms.egg-info
    copying docs\Makefile -> django-crispy-forms-2.0\docs
    copying docs\__init__.py -> django-crispy-forms-2.0\docs
    copying docs\api_bootstrap.rst -> django-crispy-forms-2.0\docs
    copying docs\api_helpers.rst -> django-crispy-forms-2.0\docs
    copying docs\api_layout.rst -> django-crispy-forms-2.0\docs
    copying docs\api_templatetags.rst -> django-crispy-forms-2.0\docs
    copying docs\concepts.rst -> django-crispy-forms-2.0\docs
    copying docs\conf.py -> django-crispy-forms-2.0\docs
    copying docs\contributing.rst -> django-crispy-forms-2.0\docs
    copying docs\crispy_tag_forms.rst -> django-crispy-forms-2.0\docs
    copying docs\crispy_tag_formsets.rst -> django-crispy-forms-2.0\docs
    copying docs\dynamic_layouts.rst -> django-crispy-forms-2.0\docs
    copying docs\faq.rst -> django-crispy-forms-2.0\docs
    copying docs\filters.rst -> django-crispy-forms-2.0\docs
    copying docs\form_helper.rst -> django-crispy-forms-2.0\docs
    copying docs\index.rst -> django-crispy-forms-2.0\docs
    copying docs\install.rst -> django-crispy-forms-2.0\docs
    copying docs\layouts.rst -> django-crispy-forms-2.0\docs
    copying docs\make.bat -> django-crispy-forms-2.0\docs
    copying docs\requirements.txt -> django-crispy-forms-2.0\docs
    copying docs\settings.py -> django-crispy-forms-2.0\docs
    copying docs\template_packs.rst -> django-crispy-forms-2.0\docs
    copying docs\_templates\sidebarintro.html -> django-crispy-forms-2.0\docs\_templates
    copying docs\images\accordiongroup_and_accordion.jpg -> django-crispy-forms-2.0\docs\images
    copying docs\images\alert.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\appended_prepended_text.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\appended_text.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\bootstrap3_horizontal_form.jpg -> django-crispy-forms-2.0\docs\images
    copying docs\images\bootstrap3_inline_form.jpg -> django-crispy-forms-2.0\docs\images
    copying docs\images\checkbox.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\custom_checkbox.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\custom_file_field.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\custom_radio.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\custom_select.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\field_disabled.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\field_with_buttons.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\file_field.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\form_actions.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\inline_checkboxes.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\inline_radios.jpg -> django-crispy-forms-2.0\docs\images
    copying docs\images\modal.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\prepended_text.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\radio.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\select.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\strict_button.png -> django-crispy-forms-2.0\docs\images
    copying docs\images\tab_and_tabholder.jpg -> django-crispy-forms-2.0\docs\images
    copying requirements\dev.txt -> django-crispy-forms-2.0\requirements
    copying requirements\lint.txt -> django-crispy-forms-2.0\requirements
    copying requirements\testing.txt -> django-crispy-forms-2.0\requirements
    copying tests\__init__.py -> django-crispy-forms-2.0\tests
    copying tests\conftest.py -> django-crispy-forms-2.0\tests
    copying tests\forms.py -> django-crispy-forms-2.0\tests
    copying tests\test_dynamic_api.py -> django-crispy-forms-2.0\tests
    copying tests\test_form_helper.py -> django-crispy-forms-2.0\tests
    copying tests\test_layout.py -> django-crispy-forms-2.0\tests
    copying tests\test_layout_objects.py -> django-crispy-forms-2.0\tests
    copying tests\test_settings.py -> django-crispy-forms-2.0\tests
    copying tests\test_tags.py -> django-crispy-forms-2.0\tests
    copying tests\test_utils.py -> django-crispy-forms-2.0\tests
    copying tests\urls.py -> django-crispy-forms-2.0\tests
    copying tests\utils.py -> django-crispy-forms-2.0\tests
    copying tests\results\test_formset_layout.html -> django-crispy-forms-2.0\tests\results
    copying tests\results\test_modelformset_layout.html -> django-crispy-forms-2.0\tests\results
    copying tests\results\test_render_hidden_fields.html -> django-crispy-forms-2.0\tests\results
    copying tests\results\utils_test.html -> django-crispy-forms-2.0\tests\results
    copying tests\results\bootstrap\test_layout_objects\test_field_with_buttons.html -> django-crispy-forms-2.0\tests\results\bootstrap\test_layout_objects
    copying tests\templates\crispy_render_template.html -> django-crispy-forms-2.0\tests\templates
    copying tests\templates\custom_field_template.html -> django-crispy-forms-2.0\tests\templates
    copying tests\templates\custom_form_template.html -> django-crispy-forms-2.0\tests\templates
    copying tests\templates\custom_form_template_with_context.html -> django-crispy-forms-2.0\tests\templates
    Writing django-crispy-forms-2.0\setup.cfg
    Creating tar archive
    removing 'django-crispy-forms-2.0' (and everything under it)
    * Building wheel from sdist
    * Creating virtualenv isolated environment...
    * Installing packages in isolated environment... (setuptools>=61.0)
    * Getting build dependencies for wheel...
    C:\Users\smith\AppData\Local\Temp\build-env-dbfsqwo5\Lib\site-packages\setuptools\config\setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_fil
    es instead.
      warnings.warn(msg, warning_class)
    C:\Users\smith\AppData\Local\Temp\build-env-dbfsqwo5\Lib\site-packages\setuptools\config\pyprojecttoml.py:108: _BetaConfiguration: Support for `[tool.setuptools]` in `pyproject.toml` is still *
    beta*.
      warnings.warn(msg, _BetaConfiguration)
    No `packages` or `py_modules` configuration, performing automatic discovery.
    `flat-layout` detected -- analysing .
    discovered packages -- ['crispy_forms', 'crispy_forms.templatetags']
    running egg_info
    writing django_crispy_forms.egg-info\PKG-INFO
    writing dependency_links to django_crispy_forms.egg-info\dependency_links.txt
    writing requirements to django_crispy_forms.egg-info\requires.txt
    writing top-level names to django_crispy_forms.egg-info\top_level.txt
    reading manifest file 'django_crispy_forms.egg-info\SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    no previously-included directories found matching 'docs\_build'
    warning: no previously-included files matching '*.pyc' found anywhere in distribution
    adding license file 'LICENSE.txt'
    writing manifest file 'django_crispy_forms.egg-info\SOURCES.txt'
    * Installing packages in isolated environment... (wheel)
    * Building wheel...
    C:\Users\smith\AppData\Local\Temp\build-env-dbfsqwo5\Lib\site-packages\setuptools\config\setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_fil
    es instead.
      warnings.warn(msg, warning_class)
    C:\Users\smith\AppData\Local\Temp\build-env-dbfsqwo5\Lib\site-packages\setuptools\config\pyprojecttoml.py:108: _BetaConfiguration: Support for `[tool.setuptools]` in `pyproject.toml` is still *
    beta*.
      warnings.warn(msg, _BetaConfiguration)
    No `packages` or `py_modules` configuration, performing automatic discovery.
    `flat-layout` detected -- analysing .
    discovered packages -- ['crispy_forms', 'crispy_forms.templatetags']
    running bdist_wheel
    running build
    running build_py
    creating build
    creating build\lib
    creating build\lib\crispy_forms
    copying crispy_forms\base.py -> build\lib\crispy_forms
    copying crispy_forms\bootstrap.py -> build\lib\crispy_forms
    copying crispy_forms\exceptions.py -> build\lib\crispy_forms
    copying crispy_forms\helper.py -> build\lib\crispy_forms
    copying crispy_forms\layout.py -> build\lib\crispy_forms
    copying crispy_forms\layout_slice.py -> build\lib\crispy_forms
    copying crispy_forms\utils.py -> build\lib\crispy_forms
    copying crispy_forms\__init__.py -> build\lib\crispy_forms
    creating build\lib\crispy_forms\templatetags
    copying crispy_forms\templatetags\crispy_forms_field.py -> build\lib\crispy_forms\templatetags
    copying crispy_forms\templatetags\crispy_forms_filters.py -> build\lib\crispy_forms\templatetags
    copying crispy_forms\templatetags\crispy_forms_tags.py -> build\lib\crispy_forms\templatetags
    copying crispy_forms\templatetags\crispy_forms_utils.py -> build\lib\crispy_forms\templatetags
    copying crispy_forms\templatetags\__init__.py -> build\lib\crispy_forms\templatetags
    running egg_info
    writing django_crispy_forms.egg-info\PKG-INFO
    writing dependency_links to django_crispy_forms.egg-info\dependency_links.txt
    writing requirements to django_crispy_forms.egg-info\requires.txt
    writing top-level names to django_crispy_forms.egg-info\top_level.txt
    reading manifest file 'django_crispy_forms.egg-info\SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    no previously-included directories found matching 'docs\_build'
    warning: no previously-included files matching '*.pyc' found anywhere in distribution
    adding license file 'LICENSE.txt'
    writing manifest file 'django_crispy_forms.egg-info\SOURCES.txt'
    copying crispy_forms\LICENSE -> build\lib\crispy_forms
    installing to build\bdist.win-amd64\wheel
    running install
    running install_lib
    creating build\bdist.win-amd64
    creating build\bdist.win-amd64\wheel
    creating build\bdist.win-amd64\wheel\crispy_forms
    copying build\lib\crispy_forms\base.py -> build\bdist.win-amd64\wheel\.\crispy_forms
    copying build\lib\crispy_forms\bootstrap.py -> build\bdist.win-amd64\wheel\.\crispy_forms
    copying build\lib\crispy_forms\exceptions.py -> build\bdist.win-amd64\wheel\.\crispy_forms
    copying build\lib\crispy_forms\helper.py -> build\bdist.win-amd64\wheel\.\crispy_forms
    copying build\lib\crispy_forms\layout.py -> build\bdist.win-amd64\wheel\.\crispy_forms
    copying build\lib\crispy_forms\layout_slice.py -> build\bdist.win-amd64\wheel\.\crispy_forms
    copying build\lib\crispy_forms\LICENSE -> build\bdist.win-amd64\wheel\.\crispy_forms
    creating build\bdist.win-amd64\wheel\crispy_forms\templatetags
    copying build\lib\crispy_forms\templatetags\crispy_forms_field.py -> build\bdist.win-amd64\wheel\.\crispy_forms\templatetags
    copying build\lib\crispy_forms\templatetags\crispy_forms_filters.py -> build\bdist.win-amd64\wheel\.\crispy_forms\templatetags
    copying build\lib\crispy_forms\templatetags\crispy_forms_tags.py -> build\bdist.win-amd64\wheel\.\crispy_forms\templatetags
    copying build\lib\crispy_forms\templatetags\crispy_forms_utils.py -> build\bdist.win-amd64\wheel\.\crispy_forms\templatetags
    copying build\lib\crispy_forms\templatetags\__init__.py -> build\bdist.win-amd64\wheel\.\crispy_forms\templatetags
    copying build\lib\crispy_forms\utils.py -> build\bdist.win-amd64\wheel\.\crispy_forms
    copying build\lib\crispy_forms\__init__.py -> build\bdist.win-amd64\wheel\.\crispy_forms
    running install_egg_info
    Copying django_crispy_forms.egg-info to build\bdist.win-amd64\wheel\.\django_crispy_forms-2.0-py3.11.egg-info
    running install_scripts
    creating build\bdist.win-amd64\wheel\django_crispy_forms-2.0.dist-info\WHEEL
    creating 'C:\Users\smith\projects\django-crispy-forms\dist\.tmp-kxgqrf59\django_crispy_forms-2.0-py3-none-any.whl' and adding 'build\bdist.win-amd64\wheel' to it
    adding 'crispy_forms/LICENSE'
    adding 'crispy_forms/__init__.py'
    adding 'crispy_forms/base.py'
    adding 'crispy_forms/bootstrap.py'
    adding 'crispy_forms/exceptions.py'
    adding 'crispy_forms/helper.py'
    adding 'crispy_forms/layout.py'
    adding 'crispy_forms/layout_slice.py'
    adding 'crispy_forms/utils.py'
    adding 'crispy_forms/templatetags/__init__.py'
    adding 'crispy_forms/templatetags/crispy_forms_field.py'
    adding 'crispy_forms/templatetags/crispy_forms_filters.py'
    adding 'crispy_forms/templatetags/crispy_forms_tags.py'
    adding 'crispy_forms/templatetags/crispy_forms_utils.py'
    adding 'django_crispy_forms-2.0.dist-info/LICENSE.txt'
    adding 'django_crispy_forms-2.0.dist-info/METADATA'
    adding 'django_crispy_forms-2.0.dist-info/WHEEL'
    adding 'django_crispy_forms-2.0.dist-info/top_level.txt'
    adding 'django_crispy_forms-2.0.dist-info/RECORD'
    removing build\bdist.win-amd64\wheel
    Successfully built django-crispy-forms-2.0.tar.gz and django_crispy_forms-2.0-py3-none-any.whl
    

    [1] https://packaging.python.org/en/latest/tutorials/packaging-projects/

    opened by smithdc1 2
  • 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
  • [Question] Extra context in formsets - additional examples / explanation for rendering field values as text in formsets?

    [Question] Extra context in formsets - additional examples / explanation for rendering field values as text in formsets?

    Hello!

    I am following the readme about Formsets with CrispyForms and have one question in relation to example:

    class ExampleFormSetHelper(FormHelper):
        def __init__(self, *args, **kwargs):
            super(FormHelper, self).__init__(*args, **kwargs)
            self.form_method = 'post'
            self.layout = Layout(
                HTML('{% if forloop.first %} Only display text on the first iteration... {% endif %}'),
                Fieldset('Item: {{forloop.counter}}', 'field'),
                'favorite_color',
                'favorite_food',
            )
            self.add_input(Submit('submit', 'Save'))
    

    Particularly - HTML('{% if forloop.first %} Only display text on the first iteration... {% endif %}'),

    Is there any way to use this forloop for rendering just values of QuerySet which is sent to form as context, something like:

    HTML('{% MyQuerySet.forloop.counter %}

    I just need to add textual captions of the QuerySet to the form.. See the screenshot example. Capture

    The code i use for helper layout

    class ProbesFormHelper(FormHelper):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.label_class = "d-none"
            self.form_method = 'POST'
    
            self.layout = Layout(
                Row(
                    Field('probe', css_class='form-group col-md-12 mb-0 d-none'),
                    Column('value', css_class='form-group col-md-1 mb-0'),
                    Column('inUse', css_class='form-group col-md-2 mb-0'),
                    HTML('{{ probes }}'), #HERE i try to render out context 'probes' - need the textual value
    
                    css_class="form-row align-items-center"
    
                ),
            )
    
            self.form_tag = False
            self.render_required_fields = True
    

    Or maybe there is a way to render individual form items from formset in template somehow, so i can build layout here and use one 'SUBMIT' for all of them?

    opened by rzrwolf 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)
Automate your google form here!

Google Form Filler (GFF) - Automate your google form here! About The idea of this project came from my online lectures as one of my professors takes a

Jay Thorat 13 Jan 05, 2023
A platform independent django form serializer

django-remote-forms A package that allows you to serialize django forms, including fields and widgets into Python dictionary for easy conversion into

WiserTogether, Inc. 219 Sep 20, 2022
Tweak the form field rendering in templates, not in python-level form definitions. CSS classes and HTML attributes can be altered.

django-widget-tweaks Tweak the form field rendering in templates, not in python-level form definitions. Altering CSS classes and HTML attributes is su

Jazzband 1.8k Jan 06, 2023
Simple integration of Flask and WTForms, including CSRF, file upload and Recaptcha integration.

Flask-WTF Simple integration of Flask and WTForms, including CSRF, file upload, and reCAPTCHA. Links Documentation: https://flask-wtf.readthedocs.io/

WTForms 1.3k Jan 04, 2023
Simple integration of Flask and WTForms, including CSRF, file upload and Recaptcha integration.

Flask-WTF Simple integration of Flask and WTForms, including CSRF, file upload, and reCAPTCHA. Links Documentation: https://flask-wtf.readthedocs.io/

WTForms 1.3k Jan 04, 2023
A fresh approach to autocomplete implementations, specially for Django. Status: v3 stable, 2.x.x stable, 1.x.x deprecated. Please DO regularely ping us with your link at #yourlabs IRC channel

Features Python 2.7, 3.4, Django 2.0+ support (Django 1.11 (LTS), is supported until django-autocomplete-light-3.2.10), Django (multiple) choice suppo

YourLabs 1.7k Jan 01, 2023
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.

django-crispy-forms The best way to have Django DRY forms. Build programmatic reusable layouts out of components, having full control of the rendered

4.6k Dec 31, 2022
Bootstrap 3 integration with Django.

django-bootstrap3 Bootstrap 3 integration for Django. Goal The goal of this project is to seamlessly blend Django and Bootstrap 3. Want to use Bootstr

Zostera B.V. 2.3k Dec 24, 2022
A flexible forms validation and rendering library for Python.

WTForms WTForms is a flexible forms validation and rendering library for Python web development. It can work with whatever web framework and template

WTForms 1.4k Dec 31, 2022
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.

django-crispy-forms The best way to have Django DRY forms. Build programmatic reusable layouts out of components, having full control of the rendered

4.6k Jan 05, 2023
Full control of form rendering in the templates.

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

Jazzband 811 Dec 01, 2022
Bootstrap 4 integration with Django.

django-bootstrap 4 Bootstrap 4 integration for Django. Goal The goal of this project is to seamlessly blend Django and Bootstrap 4. Requirements Pytho

Zostera B.V. 979 Dec 26, 2022
FlaskBB is a Forum Software written in Python using the micro framework Flask.

FlaskBB is a Forum Software written in Python using the micro framework Flask.

FlaskBB 2.3k Dec 30, 2022
Easy and free contact form on your HTML page. No backend or JS required.

Easy and free contact form on your HTML page. No backend or JS required. 🚀 💬

0xDEADF00D 8 Dec 16, 2022
A CBV to handle multiple forms in one view

django-shapeshifter A common problem in Django is how to have a view, especially a class-based view that can display and process multiple forms at onc

Kenneth Love 167 Nov 26, 2022
A Python HTML form library.

Deform Introduction Use cases Installation Example Status Projects using Deform Community and links Introduction Deform is a Python form library for g

Pylons Project 391 Jan 03, 2023
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 619 Dec 23, 2022
Streaming parser for multipart/form-data written in Python

Streaming multipart/form-data parser streaming_form_data provides a Python parser for parsing multipart/form-data input chunks (the encoding used when

Siddhant Goel 112 Dec 29, 2022