Bootstrap 4 integration with Django.

Overview

django-bootstrap 4

CI Coverage Status Latest PyPI version Any color you like

Bootstrap 4 integration for Django.

Goal

The goal of this project is to seamlessly blend Django and Bootstrap 4.

Requirements

Python 3.6 or newer with Django >= 2.2 or newer.

Documentation

The full documentation is at https://django-bootstrap4.readthedocs.io/

Installation

  1. Install using pip:

    pip install django-bootstrap4

    Alternatively, you can install download or clone this repo and call pip install -e ..

  2. Add to INSTALLED_APPS in your settings.py:

    INSTALLED_APPS = (
        # ...
        "bootstrap4",
        # ...
    )
  3. In your templates, load the bootstrap4 library and use the bootstrap_* tags:

Example template

{% load bootstrap4 %}

{# Display a form #}

<form action="/url/to/submit/" method="post" class="form">
    {% csrf_token %}
    {% bootstrap_form form %}
    {% buttons %}
        <button type="submit" class="btn btn-primary">Submit</button>
    {% endbuttons %}
</form>

Demo

A demo app is provided in demo. You can run it from your virtualenv with python manage.py runserver.

Bugs and suggestions

If you have found a bug or if you have a request for additional functionality, please use the issue tracker on GitHub.

https://github.com/zostera/django-bootstrap4/issues

License

You can use this under BSD-3-Clause. See LICENSE file for details.

Author

Developed and maintained by Zostera.

Original author: Dylan Verheul.

Thanks to everybody that has contributed pull requests, ideas, issues, comments and kind words.

Please see AUTHORS.md for a list of contributors.

Comments
  • Upgrade To Bootstrap 5

    Upgrade To Bootstrap 5

    https://v5.getbootstrap.com/

    https://github.com/twbs/bootstrap/projects

    Better to start early then to wait till the last minute.

    Probably need to rename this package when fully upgraded or make another branch.

    opened by 9mido 12
  • Updated CSS/JavaScript URLs to newer versions.

    Updated CSS/JavaScript URLs to newer versions.

    These reflect the newest versions shown on the Bootstrap website.

    I suspect folks would prefer to be on newer versions of these libraries. However, I can see how you might prefer to have users take these updates via settings updates instead.

    Updated links were all sourced from here. The cdnjs website provides the SHA values using the 512 algorithm (instead of 384) which is maybe better?

    Instead of the URLs coming from different CDNs they now all use Cloudflare (which never goes down, right? 😛).

    TESTING:

    • I tried the template tags out with these changes and didn't notice any errors in the inspector.
    opened by emmceemoore 10
  • Feature request: Allow to skip label from field completely

    Feature request: Allow to skip label from field completely

    {% bootstrap_field field show_label=False %}
    

    currently still renders the label, but with class="sr-only". This is great for most cases, but it is actually a bad idea if the users manually adds the label separately. In that case, both labels will be associated with the form field and the computed aria-label will be "{label} {label}".

    opened by xi 9
  • Setting base_url is not used

    Setting base_url is not used

    I tried to change the used bootstrap4 version. So I added to following dict to the settings.py:

    BOOTSTRAP4 = { # The Bootstrap base URL 'base_url': '//maxcdn.bootstrapcdn.com/bootstrap/4.1.3/', }

    But the tag {% bootstrap_css %} still includes version 4.0.0:

    <link crossorigin="anonymous" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" rel="stylesheet">

    bug 
    opened by pacnos 8
  • Show field errors at the field, rather than at the top

    Show field errors at the field, rather than at the top

    I'd like to show field errors at the field, instead of at the top of the form. (In horizontal mode, if it matters).

    I've looked at the source for FormRendered a bit but it doesn't seem there's a way to do this, is there?

    bug 
    opened by mverleg 8
  • Tags for including Bootstrap4

    Tags for including Bootstrap4

    I'm thinking of removing the template tags for inclusion of JS and CSS. When using local source/dist a dev should know what to include, may use webpack or another tool to combine static files, et cetera. So the only viable use case for including through tags would be CDN. This would burden us with keeping up with Bootstrap releases to adjust CDN URL's and signatures.

    Any input on this matter?

    bug help wanted good first issue 
    opened by dyve 8
  • Incorrect rendering of form with radio buttons

    Incorrect rendering of form with radio buttons

    I tried to create a simple form with 2 radio buttons and the buttons are rendered side by side horizontally. Would have expected that the radio buttons would be vertically stacked by default (as this is the bootstrap 4 default according to docs, see url below).

    view/form:

    from django.views.generic import FormView
    
    class TestForm(forms.Form):
        OPTIONS = (('1', 'Yes'), ('0', 'No'))
        
        options = forms.ChoiceField(
            label="Simple form",
            choices=OPTIONS,
            widget=forms.RadioSelect)
    
    class Index(FormView):
        template_name = 'index.html'
        form_class = TestForm
    

    template index.html:

    {% load bootstrap4 %}
    
    {# Load CSS and JavaScript #}
    {% bootstrap_css %}
    {% bootstrap_javascript jquery='full' %}
    
    {# Display django.contrib.messages as Bootstrap alerts #}
    {% bootstrap_messages %}
    
    {# Display a form #}
    <form action="/url/to/submit/" method="post" class="form">
      {% csrf_token %}
      {% bootstrap_form form %}
      {% buttons %}
        <button type="submit" class="btn btn-primary">
          Submit
        </button>
      {% endbuttons %}
    </form>
    

    result:

    Simple form
    ( ) Yes  ( ) No
    [Submit]
    

    expected result:

    Simple form
    ( ) Yes 
    ( ) No
    [Submit]
    

    The form part of the generated HTML looks something like this:

    <form action="/url/to/submit/" method="post" class="form">
      <div class="form-group">
        <label for="id_options_0">Simple form</label>
        <div class="radio radio-success" id="id_options">
          <label for="id_options_0">
            <input type="radio" name="options" value="1" class="" title="" required="" id="id_options_0"> Yes
          </label>
          <label for="id_options_1">
            <input type="radio" name="options" value="0" class="" title="" required="" id="id_options_1"> No
          </label>
        </div>
      </div>
      <div class="form-group">
        <button type="submit" class="btn btn-primary">
          Submit
        </button>
      </div>
    </form>
    

    Looking at the bootstrap 4 documentation it looks like each radio button should be placed inside a div with the class form-check to get the default stacked layout.

    Furthermore i cannot find any references to the classes radio and radio-success in bootstrap 4, these 2 are added in post_widget_render for RadioSelect.

    After browsing through the django-bootstrap4 code quickly i found def radio_list_to_class(self, html, klass) which maps <li> and </li> to empty string. If the radio buttons really are supposed to be inside a div with class form-check then we should probably change the mapping to look like this

    mapping = [
                ("<ul", '<div class="{klass}"'.format(klass=classes)),
                ("</ul>", "</div>"),
                ("<li>", '<div class="form-check">'),
                ("</li>", "</div>"),
            ]
    

    Trying this locally at least I get the default stacked layout that I expected, but I'm not sure if this will break some other layout. Or am I missing some other parameter here which can solve the initial problem?

    opened by parander 7
  • Unable to run Demo app

    Unable to run Demo app

    PS C:\Users\user\Downloads\django-bootstrap4-master\django-bootstrap4-master\demo> python manage.py runserver Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x060BFE88> Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\utils\autoreload.py", line 225, in wrapper fn(*args, **kwargs) File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\commands\runserver.py", line 112, in inner_run autoreload.raise_last_exception() File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\utils\autoreload.py", line 248, in raise_last_exception raise _exception[1] File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\__init__.py", line 327, in execute autoreload.check_errors(django.setup)() File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\utils\autoreload.py", line 225, in wrapper fn(*args, **kwargs) File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\apps\registry.py", line 89, in populate app_config = AppConfig.create(entry) File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\apps\config.py", line 90, in create module = import_module(entry) File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked ModuleNotFoundError: No module named 'tests'

    opened by schwarcu 7
  • field errors are not shown

    field errors are not shown

    Hello if render fields separatelly from the main form, field errors under the fields after false valdation arent shown. If render form as a whole - everything is fine.

    html:

                        <div class = "offset-1 col-4" >
                            {% bootstrap_field form1.last_year layout='inline' size="small" form_group_class="" label_class="form-label col-md-3"  %}
                            <small class="form-text text-muted">{{ form1.last_year.help_text }}</small>
                        </div>
    

    Should i use special div classes to swith it on maybe? Fields are marked in green and red according True/false validation -thats fine, but no error texts are shown under the field. Main errors panel above the whole form displays them

    Thank you

    opened by AlekseiKhatkevich 6
  • Is there an option to mark a form as not required? If no: Add one

    Is there an option to mark a form as not required? If no: Add one

    I have an html form that consists of multiple model forms. Not all of the forms need to be filled out by the user. Thus i would like to make it so that the forms that are not required only cause errors to be displayed if they are filled out partially in an invalid way.

    To give a more concrete example: I have a form for creating a new customer object in the database. This object represents a company. It may have a contact person associated with it.

    For the data of the customer object itself i use a django ModelForm like this:

    class NewCustomerForm(ModelForm):
        class Meta:
            model = Customer
            fields = [
                'customer_id',
                'name',
                'discount_special',
                'provision',
                'reseller',
                'tax_id_number',
                ]
    

    notice that there are no fields for the contact person there, because for that i have another ModelForm:

    class ContactForm(ModelForm):
        class Meta:
            model = Contact
            fields = [
                'name',
                'email',
                'phone',
                ]
    

    I do not need information about the contact person to create a customer object, but in the template i use to render these I treat them as one big html-<form>-tag so all the information gets submitted with at the same time. It works fine if every field is filled out with valid data. If the fields of the contact person are fully empty, I would like to just create the customer object. For that i need the client-side validation to allow submitting the whole html-form even though the part for the contact person is empty. Currently it seems like i need to write some custom JS to achieve that.

    I would really like if there was a parameter like this to specify that the form as a whole may be empty (or invalid):

    {% bootstrap_form contact required=False %}
    

    Is there a parameter that works like this?

    P.S.: This issue aside i think that django-bootstrap4 works pretty well for me, so GOOD JOB!

    EDIT: Make the wording more precise

    opened by SvenMoenig 6
  • fix rendering of checkbox

    fix rendering of checkbox

    Hi,

    Currently checkboxes are still rendered in the Bootstrap 3 way: the checkbox input is rendered within the checkbox label. Because of changes in the way checkboxes are handled in Bootstrap 4, checkboxes rendered like this, don't work in Bootstrap 4 compatible themes.

    This pull request changes the rendering to the Bootstrap 4 way.

    opened by SanderTuit 6
  • Bump tox from 3.27.1 to 4.2.1

    Bump tox from 3.27.1 to 4.2.1

    Bumps tox from 3.27.1 to 4.2.1.

    Release notes

    Sourced from tox's releases.

    4.2.1

    What's Changed

    New Contributors

    Full Changelog: https://github.com/tox-dev/tox/compare/4.2.0...4.2.1

    4.2.0

    What's Changed

    Full Changelog: https://github.com/tox-dev/tox/compare/4.1.3...4.2.0

    4.1.3

    What's Changed

    Full Changelog: https://github.com/tox-dev/tox/compare/4.1.2...4.1.3

    4.1.2

    What's Changed

    Full Changelog: https://github.com/tox-dev/tox/compare/4.1.1...4.1.2

    4.1.1

    What's Changed

    Full Changelog: https://github.com/tox-dev/tox/compare/4.1.0...4.1.1

    4.1.0

    What's Changed

    ... (truncated)

    Changelog

    Sourced from tox's changelog.

    v4.2.1 (2023-01-03)

    Bugfixes - 4.2.1

    - Fix extracting extras from markers with more than 2 extras in an or chain - by :user:`dconathan`. (:issue:`2791`)
    

    v4.2.0 (2023-01-03)

    Features - 4.2.0

    • Packaging environments now inherit from the pkgenv section, allowing to set all your packaging options in one place, and support the deps key to set additional dependencies that will be installed after pyproject.toml static requires but before backends dynamic requires - by :user:gaborbernat. (:issue:2543)

    Improved Documentation - 4.2.0

    - Document breaking changes with tox 4 and packaging environments - by :user:`gaborbernat`. (:issue:`2543`)
    - Document how to handle environments whose names match ``tox`` subcommands - by :user:`sirosen`. (:issue:`2728`)
    

    v4.1.3 (2023-01-02)

    Bugfixes - 4.1.3

    - Reuse package_env with ``--installpkg`` - by :user:`q0w`. (:issue:`2442`)
    - Fail more gracefully when pip :ref:`install_command` is empty - by :user:`jayaddison`. (:issue:`2695`)
    

    Improved Documentation - 4.1.3 </code></pre> <ul> <li>Add breaking-change documentation for empty <code>install_command</code> values - by :user:<code>jayaddison</code>. (:issue:<code>2695</code>)</li> </ul> <p>Misc - 4.1.3</p> <pre><code>- :issue:2796, :issue:2797

    v4.1.2 (2022-12-30)

    Bugfixes - 4.1.2 </code></pre> <ul> <li>Fix <code>--skip-missing-interpreters</code> behaviour - by :user:<code>q0w</code>. (:issue:<code>2649</code>)</li> <li>Restore tox 3 behaviour of showing the output of pip freeze, however now only active when running inside a CI environment - by :user:<code>gaborbernat</code>. (:issue:<code>2685</code>)</li> <li>Fix extracting extras from markers with many extras - by :user:<code>q0w</code>. (:issue:<code>2791</code>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary>

    <ul> <li><a href="https://github.com/tox-dev/tox/commit/43382af3a228c4dfc098ec50e136971553ee0035"><code>43382af</code></a> release 4.2.1</li> <li><a href="https://github.com/tox-dev/tox/commit/4578eaa45fe5f5f80f08754627be8f4376cf3a97"><code>4578eaa</code></a> update how extras are extracted to handle cases with more than 2 groups (<a href="https://github-redirect.dependabot.com/tox-dev/tox/issues/2812">#2812</a>)</li> <li><a href="https://github.com/tox-dev/tox/commit/27c52ec2b77647374b7ff4a82244f0ff489d1afc"><code>27c52ec</code></a> Update upgrading.rst</li> <li><a href="https://github.com/tox-dev/tox/commit/2e977fb97a60129eee6764fcf0a4c86e01ceabee"><code>2e977fb</code></a> Update changelog.rst</li> <li><a href="https://github.com/tox-dev/tox/commit/d16a666ae31c2fd6d8204c39498758cc529167a3"><code>d16a666</code></a> release 4.2.0</li> <li><a href="https://github.com/tox-dev/tox/commit/82dcd45af55af239a7be81ee2e86948c6fe75518"><code>82dcd45</code></a> Packaging inherits from pkgenv, deps and document tox 4 packaging changes (<a href="https://github-redirect.dependabot.com/tox-dev/tox/issues/2">#2</a>...</li> <li><a href="https://github.com/tox-dev/tox/commit/31c8d1fc48ccf95f66b2920b356f9490686ccfc7"><code>31c8d1f</code></a> Document ambiguous usages in v3-to-v4 (<a href="https://github-redirect.dependabot.com/tox-dev/tox/issues/2808">#2808</a>)</li> <li><a href="https://github.com/tox-dev/tox/commit/031e902822284d65cbeb11b23dd05e6ba5107961"><code>031e902</code></a> Introduce Upgrading doc page for tox4 (<a href="https://github-redirect.dependabot.com/tox-dev/tox/issues/2805">#2805</a>)</li> <li><a href="https://github.com/tox-dev/tox/commit/d05ea02b7344766be3eb8046bac8843e10cf43a8"><code>d05ea02</code></a> release 4.1.3</li> <li><a href="https://github.com/tox-dev/tox/commit/997128ced47936adabb2f267d2606f8eac253ad3"><code>997128c</code></a> Better message when command parsing on empty input (<a href="https://github-redirect.dependabot.com/tox-dev/tox/issues/2807">#2807</a>)</li> <li>Additional commits viewable in <a href="https://github.com/tox-dev/tox/compare/3.27.1...4.2.1">compare view</a></li> </ul> </details>

    <br />

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • Bump docformatter from 1.5.0 to 1.5.1

    Bump docformatter from 1.5.0 to 1.5.1

    Bumps docformatter from 1.5.0 to 1.5.1.

    Changelog

    Sourced from docformatter's changelog.

    v1.5.1 (2022-12-16)

    Full Changelog

    Bug Fixes

    Merged pull requests:

    Commits
    • c7ee0f3 Fix incorrect pyproject.toml parsing of boolean values (#133)
    • d81298b Update AUTHORS.rst file with new author(s)
    • 682a09d No empty lines before class and method docstrings (#131)
    • 3b73dc5 chore: update CI workflow so 3.6 still runs (#132)
    • d369613 Update AUTHORS.rst file with new author(s)
    • d9a3b61 Allow showing the diff when using --in-place or --check with --diff (#128)
    • 1def3c4 chore: move script to src layout and make a package (#117)
    • fef89ad feat: format class attribute docstrings (#116)
    • 9c18ed4 fix: don't wrap URLs (#115)
    • 214a0cd release: v1.5.0 (#114)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • Bump autoflake from 1.7.8 to 2.0.0

    Bump autoflake from 1.7.8 to 2.0.0

    Bumps autoflake from 1.7.8 to 2.0.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • Bump flake8 from 5.0.4 to 6.0.0

    Bump flake8 from 5.0.4 to 6.0.0

    Bumps flake8 from 5.0.4 to 6.0.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • Fix two issues:

    Fix two issues:

    • Append/prepend attributes not appearing at all
    • Validation feedback not appearing inside the input-group, and help text not appearing immediately after the input-group
    opened by tg-bot543 1
Releases(v3.0.1)
  • v3.0.1(May 20, 2021)

  • v1.1.0(Dec 9, 2019)

    • Update default Bootstrap to v4.3.1
    • Add support for Python 3.8, Django 3 and Django master
    • Switch to Django manage.py for test running
    • Update Makefile commands
    • Update tox configuration
    • Use correct license (BSD-3-Clause)
    • Fix typo's in docstrings
    • Update Travis configuration
    • Drop MANIFEST.in, use setuptools_scm
    • Stop using _version.py, use git tags for versioning
    • Fixed issues with labels and input (#174 and #181)
    Source code(tar.gz)
    Source code(zip)
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
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
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
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
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
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
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
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
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
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
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 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
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
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
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 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
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