{ "info": { "author": "Uros Trstenjak", "author_email": "uros.trstenjak@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "============================\nDjango Bootstrap Modal Forms\n============================\n\nA Django plugin for creating AJAX driven forms in Bootstrap modal.\n\nLive Demo\n=========\n\nDemo_\n\n.. _Demo: https://trco.si/dbmf/\n\nInstallation\n============\n\n1. Install ``django-bootstrap-modal-forms``::\n\n $ pip install django-bootstrap-modal-forms\n\n2. Add ``bootstrap_modal_forms`` to your INSTALLED_APPS in settings.py::\n\n INSTALLED_APPS = [\n ...\n 'bootstrap_modal_forms',\n ...\n ]\n\n3. Include Bootstrap, jQuery and ``jquery.bootstrap.modal.forms.js`` on every page where you would like to set up the AJAX driven Django forms in Bootstrap modal.\n\nIMPORTANT: Adjust Bootstrap and jQuery file paths to match yours, but include ``jquery.bootstrap.modal.forms.js`` exactly as in code bellow.\n\n.. code-block:: html+django\n\n \n \n \n\n \n \n \n \n \n \n \n\nHow it works?\n=============\n.. code-block:: html\n\n index.html\n\n \n\n1. Click event on html element instantiated with ``modalForm`` opens modal\n2. Form at ``formURL`` is appended to the modal\n3. On submit the form is POSTed via AJAX request to ``formURL``\n4. **Unsuccessful POST request** returns errors, which are shown in modal\n5. **Successful POST request** submits the form and redirects to ``success_url`` and shows ``success_message``, which are both defined in related Django view\n\nUsage\n=====\n\n1. Form\n*******\n\nDefine ModelForm and inherit built-in form ``BSModalForm``.\n\n.. code-block:: python\n\n forms.py\n\n from .models import Book\n from bootstrap_modal_forms.forms import BSModalForm\n\n class BookForm(BSModalForm):\n class Meta:\n model = Book\n fields = ['title', 'author', 'price']\n\n2. Form's html\n**************\n\nDefine form's html and save it as Django template.\n\n- Bootstrap 4 modal elements are used in this example.\n- Button triggering the submission should have type attribute set to ``\"button\"`` and not ``\"submit\"``.\n- Add ``class=\"submit-btn\"`` or custom ``submitBtn`` class (see paragraph **Options**) to this button.\n- Form will POST to ``formURL`` defined in #6.\n- Add ``class=\"invalid\"`` or custom ``errorClass`` (see paragraph **Options**) to the elements that wrap the fields.\n- ``class=\"invalid\"`` acts as a flag for the fields having errors after the form has been POSTed.\n\n.. code-block:: html\n\n book/create_book.html\n\n
\n {% csrf_token %}\n\n
\n
Create new Book
\n \n
\n\n
\n {% for field in form %}\n
\n \n {{ field }}\n {% for error in field.errors %}\n

{{ error }}

\n {% endfor %}\n
\n {% endfor %}\n
\n\n
\n \n \n
\n\n
\n\n3. Class-based view\n*******************\n\nDefine a class-based view BookCreateView and inherit from built-in generic view ``BSModalCreateView``. BookCreateView processes the form defined in #1, uses the template defined in #2 and redirects to ``success_url`` showing ``success_message``.\n\n.. code-block:: python\n\n views.py\n\n from django.urls import reverse_lazy\n from .forms import BookForm\n from .models import Book\n from bootstrap_modal_forms.generic import BSModalCreateView\n\n class BookCreateView(BSModalCreateView):\n template_name = 'examples/create_book.html'\n form_class = BookForm\n success_message = 'Success: Book was created.'\n success_url = reverse_lazy('index')\n\n4. URL for the view\n*******************\n\nDefine URL for the view in #3.\n\n.. code-block:: python\n\n from django.urls import path\n from books import views\n\n urlpatterns = [\n path('', views.Index.as_view(), name='index'),\n path('create/', views.BookCreateView.as_view(), name='create_book'),\n ]\n\n5. Bootstrap modal and trigger element\n**************************************\n\nDefine the Bootstrap modal window and html element triggering modal opening.\n\n- Same modal window can be used for multiple ``modalForms`` in single template (see #6).\n- Trigger element (in this example button with ``create-book`` class) is used for instantiation of ``modalForm`` in #6.\n- Any element can be trigger element as long as ``modalForm`` is bound to it.\n- Click event on trigger element loads form's html from #2 within ``
`` and sets action attribute of the form to ``formURL`` set in #6.\n\n.. code-block:: html+django\n\n index.html\n\n
\n
\n
\n\n
\n
\n
\n\n \n \n\n6. modalForm\n************\n\nAdd script to the template from #5 and bind the ``modalForm`` to the trigger element. Set BookCreateView URL defined in #4 as ``formURL`` property of ``modalForm``.\n\n- If you want to create **more modalForms in single template using the same modal window** from #5, repeat steps #1 to #4, create new trigger element as in #5 and bind the new ``modalForm`` with unique URL to it.\n- Default values for ``modalID``, ``modalContent``, ``modalForm`` and ``errorClass`` are used in this example, while ``formURL`` is customized. If you customize any other option adjust the code of the above examples accordingly.\n\n.. code-block:: html\n\n index.html\n\n \n\nmodalForm options\n=================\n\nmodalID\n Sets the custom id of the modal. ``Default: \"#modal\"``\n\nmodalContent\n Sets the custom class of the element to which the form's html is appended. If you change ``modalContent`` to the custom class, you should also change ``modalForm`` accordingly. To keep Bootstrap's modal style you should than copy Bootstrap's style for ``modal-content`` and set it to your new modalContent class. ``Default: \".modal-content\"``\n\nmodalForm\n Sets the custom form selector. ``Default: \".modal-content form\"``\n\nformURL\n Sets the url of the form's view and html. ``Default: null``\n\nerrorClass\n Sets the custom class for the form fields having errors. ``Default: \".invalid\"``\n\nsubmitBtn\n Sets the custom class for the button triggering form submission in modal. ``Default: \".submit-btn\"``\n\nGeneric views\n=============\n\nImport generic views with ``from bootstrap_modal_forms.generic import BSModalCreateView``.\n\nBSModalCreateView\n Inherits PassRequestMixin and Django's SuccessMessageMixin and generic.CreateView.\n\nBSModalUpdateView\n Inherits PassRequestMixin and Django's SuccessMessageMixin and generic.UpdateView.\n\nBSModalReadView\n Inherits Django's generic.DetailView.\n\nBSModalDeleteView\n Inherits DeleteMessageMixin and Django's generic.DeleteView.\n\nForms\n=====\n\nImport forms with ``from bootstrap_modal_forms.forms import BSModalForm``.\n\nBSModalForm\n Inherits PopRequestMixin, CreateUpdateAjaxMixin and Django's forms.ModelForm.\n\nMixins\n======\n\nImport mixins with ``from bootstrap_modal_forms.mixins import PassRequestMixin``.\n\nPassRequestMixin\n Puts the request into the form's kwargs.\n\nPopRequestMixin\n Pops request out of the kwargs and attaches it to the form's instance.\n\nCreateUpdateAjaxMixin\n Saves or doesn't save the object based on the request type.\n\nDeleteMessageMixin\n Deletes object if request is not ajax request.\n\nLoginAjaxMixin\n Authenticates user if request is not ajax request.\n\nExamples\n========\n\nTo see ``django-bootstrap-modal-forms`` in action clone the repository and run the examples locally::\n\n $ git clone https://github.com/trco/django-bootstrap-modal-forms.git\n $ cd django-bootstrap-modal-forms\n $ pip install -r requirements.txt\n $ python manage.py migrate\n $ python manage.py runserver\n\nTests\n=====\n\nRun unit and functional tests inside of project folder::\n\n $ python manage.py test\n\nExample 1: Signup form in Bootstrap modal\n*****************************************\n\nFor explanation how all the parts of the code work together see paragraph **Usage**. To test the working solution presented here clone and run **Examples**.\n\n.. code-block:: python\n\n forms.py\n\n from django.contrib.auth.forms import UserCreationForm\n from django.contrib.auth.models import User\n from bootstrap_modal_forms.mixins import PopRequestMixin, CreateUpdateAjaxMixin\n\n\n class CustomUserCreationForm(PopRequestMixin, CreateUpdateAjaxMixin,\n UserCreationForm):\n class Meta:\n model = User\n fields = ['username', 'password1', 'password2']\n\n.. code-block:: html\n\n signup.html\n\n {% load widget_tweaks %}\n\n
\n {% csrf_token %}\n\n
\n

Sign up

\n \n
\n\n
\n\n
\n {% for error in form.non_field_errors %}\n {{ error }}\n {% endfor %}\n
\n\n {% for field in form %}\n
\n \n {% render_field field class=\"form-control\" placeholder=field.label %}\n
\n {% for error in field.errors %}\n

{{ error }}

\n {% endfor %}\n
\n
\n {% endfor %}\n
\n\n
\n \n
\n\n
\n\n.. code-block:: python\n\n views.py\n\n from django.urls import reverse_lazy\n from bootstrap_modal_forms.generic import BSModalCreateView\n from .forms import CustomUserCreationForm\n\n class SignUpView(BSModalCreateView):\n form_class = CustomUserCreationForm\n template_name = 'examples/signup.html'\n success_message = 'Success: Sign up succeeded. You can now Log in.'\n success_url = reverse_lazy('index')\n\n.. code-block:: python\n\n urls.py\n\n from django.urls import path\n from . import views\n\n app_name = 'accounts'\n urlpatterns = [\n path('signup/', views.SignUpView.as_view(), name='signup')\n ]\n\n\n.. code-block:: html\n\n .html file containing modal, trigger element and script instantiating modalForm\n\n
\n
\n
\n
\n
\n\n \n\n \n\nExample 2: Login form in Bootstrap modal\n****************************************\n\nFor explanation how all the parts of the code work together see paragraph **Usage**. To test the working solution presented here clone and run **Examples**.\n\nYou can set the login redirection by setting the ``LOGIN_REDIRECT_URL`` in ``settings.py``.\n\nYou can also set the custom login redirection by:\n\n1. Adding ``success_url`` to the ``extra_context`` of ``CustomLoginView``\n2. Setting this ``success_url`` variable as a value of the ``hidden input field`` with ``name=\"next\"`` within the Login form html\n\n.. code-block:: python\n\n forms.py\n\n from django.contrib.auth.forms import AuthenticationForm\n from django.contrib.auth.models import User\n\n class CustomAuthenticationForm(AuthenticationForm):\n class Meta:\n model = User\n fields = ['username', 'password']\n\n.. code-block:: html\n\n login.html\n\n {% load widget_tweaks %}\n\n
\n {% csrf_token %}\n\n
\n

Log in

\n \n
\n\n
\n\n
\n {% for error in form.non_field_errors %}\n {{ error }}\n {% endfor %}\n
\n\n {% for field in form %}\n
\n \n {% render_field field class=\"form-control\" placeholder=field.label %}\n
\n {% for error in field.errors %}\n

{{ error }}

\n {% endfor %}\n
\n
\n {% endfor %}\n\n \n \n
\n\n
\n \n
\n\n
\n\n.. code-block:: python\n\n views.py\n\n from django.urls import reverse_lazy\n from bootstrap_modal_forms.generic import BSModalLoginView\n from .forms import CustomAuthenticationForm\n\n class CustomLoginView(BSModalLoginView):\n authentication_form = CustomAuthenticationForm\n template_name = 'examples/login.html'\n success_message = 'Success: You were successfully logged in.'\n extra_context = dict(success_url=reverse_lazy('index'))\n\n.. code-block:: python\n\n urls.py\n\n from django.urls import path\n from . import views\n\n app_name = 'accounts'\n urlpatterns = [\n path('login/', views.CustomLoginView.as_view(), name='login')\n ]\n\n.. code-block:: html\n\n .html file containing modal, trigger element and script instantiating modalForm\n\n
\n
\n
\n
\n
\n\n \n\n \n\nExample 3: CRUD forms in Bootstrap modal\n****************************************\n\nFor explanation how all the parts of the code work together see paragraph **Usage**. To test the working solution presented here clone and run **Examples**.\n\n.. code-block:: python\n\n forms.py\n\n from .models import Book\n from bootstrap_modal_forms.forms import BSModalForm\n\n\n class BookForm(BSModalForm):\n class Meta:\n model = Book\n exclude = ['timestamp']\n\n.. code-block:: html\n\n create_book.html\n\n {% load widget_tweaks %}\n\n
\n {% csrf_token %}\n\n
\n

Create Book

\n \n
\n\n
\n\n
\n {% for error in form.non_field_errors %}\n {{ error }}\n {% endfor %}\n
\n\n {% for field in form %}\n
\n \n {% render_field field class=\"form-control\" placeholder=field.label %}\n
\n {% for error in field.errors %}\n

{{ error }}

\n {% endfor %}\n
\n
\n {% endfor %}\n
\n\n
\n \n
\n\n
\n\n.. code-block:: html\n\n update_book.html\n\n {% load widget_tweaks %}\n\n
\n {% csrf_token %}\n\n
\n

Update Book

\n \n
\n\n
\n\n
\n {% for error in form.non_field_errors %}\n {{ error }}\n {% endfor %}\n
\n\n {% for field in form %}\n
\n \n {% render_field field class=\"form-control\" placeholder=field.label %}\n
\n {% for error in field.errors %}\n

{{ error }}

\n {% endfor %}\n
\n
\n {% endfor %}\n
\n\n
\n \n
\n\n
\n\n.. code-block:: html\n\n read_book.html\n\n {% load widget_tweaks %}\n\n
\n

Book details

\n \n
\n\n
\n\n
\n Title:\n {{ book.title }}\n
\n
\n Author:\n {{ book.author }}\n
\n
\n Price:\n {{ book.price }}\n \u20ac\n
\n\n
\n\n
\n \n
\n\n.. code-block:: html\n\n {% load widget_tweaks %}\n\n
\n {% csrf_token %}\n\n
\n

Delete Book

\n \n
\n\n
\n

Are you sure you want to delete book with title\n {{ book.title }}?

\n
\n\n
\n \n
\n\n
\n\n.. code-block:: python\n\n views.py\n\n from django.urls import reverse_lazy\n from django.views import generic\n from .forms import BookForm\n from .models import Book\n from bootstrap_modal_forms.generic import (BSModalCreateView,\n BSModalUpdateView,\n BSModalReadView,\n BSModalDeleteView)\n\n class Index(generic.ListView):\n model = Book\n context_object_name = 'books'\n template_name = 'index.html'\n\n # Create\n class BookCreateView(BSModalCreateView):\n template_name = 'examples/create_book.html'\n form_class = BookForm\n success_message = 'Success: Book was created.'\n success_url = reverse_lazy('index')\n\n # Update\n class BookUpdateView(BSModalUpdateView):\n model = Book\n template_name = 'examples/update_book.html'\n form_class = BookForm\n success_message = 'Success: Book was updated.'\n success_url = reverse_lazy('index')\n\n # Read\n class BookReadView(BSModalReadView):\n model = Book\n template_name = 'examples/read_book.html'\n\n # Delete\n class BookDeleteView(BSModalDeleteView):\n model = Book\n template_name = 'examples/delete_book.html'\n success_message = 'Success: Book was deleted.'\n success_url = reverse_lazy('index')\n\n.. code-block:: python\n\n urls.py\n\n from django.urls import path\n from books import views\n\n urlpatterns = [\n path('', views.Index.as_view(), name='index'),\n path('create/', views.BookCreateView.as_view(), name='create_book'),\n path('update/', views.BookUpdateView.as_view(), name='update_book'),\n path('read/', views.BookReadView.as_view(), name='read_book'),\n path('delete/', views.BookDeleteView.as_view(), name='delete_book')\n ]\n\n.. code-block:: html\n\n .html file containing modal, trigger elements and script instantiating modalForms\n\n
\n
\n
\n
\n
\n\n \n \n\n {% for book in books %}\n
\n \n \n \n \n \n \n
\n {% endfor %}\n\n \n\n- See the difference between button triggering Create action and buttons triggering Read, Update and Delete actions.\n- Within the for loop in .html file the ``data-id`` attribute of each Update, Read and Delete button should be set to relevant URL with pk argument of the object to be updated, read or deleted.\n- These ``data-id`` URLs should than be retrieved for each button in script and set as ``formURLs`` for ``modalForms`` bound to the buttons.\n\nContribute\n==========\n\nThis is an Open Source project and any contribution is appreciated.\n\nLicense\n=======\n\nThis project is licensed under the MIT License.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/trco/django-bootstrap-modal-forms", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "django-bootstrap-modal-forms", "package_url": "https://pypi.org/project/django-bootstrap-modal-forms/", "platform": "", "project_url": "https://pypi.org/project/django-bootstrap-modal-forms/", "project_urls": { "Homepage": "https://github.com/trco/django-bootstrap-modal-forms" }, "release_url": "https://pypi.org/project/django-bootstrap-modal-forms/1.4.4/", "requires_dist": null, "requires_python": "", "summary": "A Django plugin for creating AJAX driven forms in Bootstrap modal.", "version": "1.4.4" }, "last_serial": 5902588, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "07812d35c5d191a4a9d02548e01d4c55", "sha256": "02c84c306c44f8d963044ac100d240c35ba0854855adfb764ad65beed99ad1d5" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.0.tar.gz", "has_sig": false, "md5_digest": "07812d35c5d191a4a9d02548e01d4c55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2645, "upload_time": "2018-05-28T19:58:58", "url": "https://files.pythonhosted.org/packages/de/d1/f449751fbcd71ae2f80f41701a6c59876f5407f6fc5f0704034af078dd70/django-bootstrap-modal-forms-1.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "d82c2032c2fd7a2d5d93ea2a7c5aeea3", "sha256": "a02618036b67887e6de1689b85fa5afc1f896fedadb65543b84b39ce6b30aecc" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.1.0.tar.gz", "has_sig": false, "md5_digest": "d82c2032c2fd7a2d5d93ea2a7c5aeea3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5757, "upload_time": "2018-08-11T19:29:44", "url": "https://files.pythonhosted.org/packages/9b/bd/7d5c52e56904b05abe6d40184edff491967ef7bd1848ffc2c3ee4984e7fa/django-bootstrap-modal-forms-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "db66fd05372690b275538264a0a48992", "sha256": "8f45de6d6ea55af8d4f88a99cdd1792854f7b8dacb63336c260ac13d65d47d49" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.2.0.tar.gz", "has_sig": false, "md5_digest": "db66fd05372690b275538264a0a48992", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6225, "upload_time": "2018-08-12T14:19:40", "url": "https://files.pythonhosted.org/packages/3f/3a/d6257552e9c40c80b380dadad5c39f3e6df8aebea42d79c76c0c11adf0d1/django-bootstrap-modal-forms-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "8f870c1f117e3b6ef550b827d72bb023", "sha256": "8c7b7c475cacc008167d3ad7ebc0c450089b8e09d46d08453f609865ef3ad2fc" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.2.1.tar.gz", "has_sig": false, "md5_digest": "8f870c1f117e3b6ef550b827d72bb023", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6310, "upload_time": "2018-08-14T09:26:26", "url": "https://files.pythonhosted.org/packages/94/f6/c07e7a00c6d895fa30b1eb5d1e2977d52ab41c5b3d8f92d806105b45052a/django-bootstrap-modal-forms-1.2.1.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "3672cfcc2b106ad846b4876a16e147a3", "sha256": "0514673bca3ed559e2decec2c534b1bd33093349632a06703acc503360a1ac99" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.3.1.tar.gz", "has_sig": false, "md5_digest": "3672cfcc2b106ad846b4876a16e147a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14967, "upload_time": "2018-08-31T20:37:03", "url": "https://files.pythonhosted.org/packages/1e/e1/0f7a282144b518c35dac332416154ebf51eda82fbc74c0b47439162e9219/django-bootstrap-modal-forms-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "9a52f3aef9a3c3decba795cb405fe25b", "sha256": "9c3aa69cd22b736b9a4e8a99485d10cc829b8d842138690f5e848a856a2c3a83" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.3.2.tar.gz", "has_sig": false, "md5_digest": "9a52f3aef9a3c3decba795cb405fe25b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19277, "upload_time": "2019-03-30T18:58:39", "url": "https://files.pythonhosted.org/packages/2b/e0/88efa2ca83a29480fc6fc9dfb9164ec55630dcfd98f0b476f65150180fc6/django-bootstrap-modal-forms-1.3.2.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "0b297501d07000a9e5d55bbc12dfee94", "sha256": "c0ff0036d8f5622490a7acb406498ba245280116a9f425e71767c5da3e455f5d" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.4.0.tar.gz", "has_sig": false, "md5_digest": "0b297501d07000a9e5d55bbc12dfee94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21021, "upload_time": "2019-03-31T19:35:02", "url": "https://files.pythonhosted.org/packages/01/a5/258ebbb87dfa7cbd8ffe87c5db00750d79643c069c5cfc26eb2e270e7577/django-bootstrap-modal-forms-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "492762e945297772dd419f035425672c", "sha256": "f7ba0941fdca9be590417e9a9f35e4252bc00b72c69b0d1f3752f469b71031a8" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.4.1.tar.gz", "has_sig": false, "md5_digest": "492762e945297772dd419f035425672c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23639, "upload_time": "2019-04-02T20:33:03", "url": "https://files.pythonhosted.org/packages/08/10/f71be7ed8b92d2373f6f74974e1ae33020c919d3848037967a16f56d888e/django-bootstrap-modal-forms-1.4.1.tar.gz" } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "d6f4f0714a367eb7be8e95793b51d540", "sha256": "71b60e385562f2e9c07f5c2eb9a67e5766837d9fbd856b03fd1d05111a52d9ba" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.4.2.tar.gz", "has_sig": false, "md5_digest": "d6f4f0714a367eb7be8e95793b51d540", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23687, "upload_time": "2019-04-15T20:10:25", "url": "https://files.pythonhosted.org/packages/7a/b9/7d45c9d8bf2051e4c295915dc1142f0557787a6cf01593f27a2b4e6dc200/django-bootstrap-modal-forms-1.4.2.tar.gz" } ], "1.4.3": [ { "comment_text": "", "digests": { "md5": "d74d375a1e1a001b431f2928debdf1b9", "sha256": "6647c90200e4fc6cd6eff5366992b1bf7e55fbb3112f77a3535057dc0244beba" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.4.3.tar.gz", "has_sig": false, "md5_digest": "d74d375a1e1a001b431f2928debdf1b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25008, "upload_time": "2019-09-15T20:36:45", "url": "https://files.pythonhosted.org/packages/05/14/c427209597fd6019597f607a1b231b95b64c3ffcfac237afb0c50a14d9ab/django-bootstrap-modal-forms-1.4.3.tar.gz" } ], "1.4.4": [ { "comment_text": "", "digests": { "md5": "786600d6e693c3b8fb2a797e2ca05673", "sha256": "0d79faeaa9742f875cc7c54ce31e793abf3fca9accb63eb10f1988040a3a49db" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.4.4.tar.gz", "has_sig": false, "md5_digest": "786600d6e693c3b8fb2a797e2ca05673", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25006, "upload_time": "2019-09-29T13:05:34", "url": "https://files.pythonhosted.org/packages/c2/08/3e2877911f33821e00c6f61cc4cf4cf020e36e7f2660492dbd9d0303f960/django-bootstrap-modal-forms-1.4.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "786600d6e693c3b8fb2a797e2ca05673", "sha256": "0d79faeaa9742f875cc7c54ce31e793abf3fca9accb63eb10f1988040a3a49db" }, "downloads": -1, "filename": "django-bootstrap-modal-forms-1.4.4.tar.gz", "has_sig": false, "md5_digest": "786600d6e693c3b8fb2a797e2ca05673", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25006, "upload_time": "2019-09-29T13:05:34", "url": "https://files.pythonhosted.org/packages/c2/08/3e2877911f33821e00c6f61cc4cf4cf020e36e7f2660492dbd9d0303f960/django-bootstrap-modal-forms-1.4.4.tar.gz" } ] }