Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8377695
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 9, 20262026-06-09T15:44:12+00:00 2026-06-09T15:44:12+00:00

my use case is: a) Present a form loaded via ajax in a bootstrap

  • 0

my use case is:

a) Present a form loaded via ajax in a bootstrap modal, the fancy overlay effect stuff.. . I followed these instructions.

This works fine. (see code below)

b) Submit this form back to my Django app, try to validate it, and if it does not validate, re-show the form with the errors in the fancy bootstrap modal.

I can reload the form via ajax, but I m not able to represent it again in the modal.

Note: I did not include the view since it does nothing special. Only instantiating and validating the form.

Quite a lot to read below, so just continue if you think the use case sounds interesting…

My taskList.html looks like this:

<table id="listItemTable" class="table table-bordered">
        <thead>
            <tr>
                <th>Name</th>
                <th>Edit</th>
            </tr>
        </thead>
    <tbody>
        <tr>
            <td>Task 1</td>
            <td><a class="editItem" href="/update/item/1/">edit</a></td>
        </tr>
    </tbody>
</table>

<div class="modal hide" id="itemFormModal"></div>
<div id="modalExtraJsPlaceholder"></div>

.js for loading the form + showing the bootstrap modal + binding form to a .jquery submit call:

$(document).ready(function() {
   modalConnect();
});

<script type="text/javascript">
 //connects the modal load for each <a> with class editItem
 //Functionality 1
     //loads an item edit form from the server and replaces the itemFormModal with the form
     //presents the modal with $("#itemFormModal").modal('show');
 //Functionality 2
     //loads some extra js "modalExtraJsHtml"
     //calls the function "submitItemModalFormBind" which has been loaded via "modalExtraJsHtml"

 function modalConnect(){
    $(".editItem").click(function(ev) { // for each edit item <a>
    ev.preventDefault(); // prevent navigation
    url = ($(this)[0].href); //get the href from <a>
    $.get(url, function(results){
       var itemForm = $("#ajax_form_modal_result", results);
       var modalExtraJs = $("#modalExtraJs", results);
       //get the html content
       var modalExtraJsHtml = modalExtraJs.html();
       //update the dom with the received results
        $('#itemFormModal').html(itemForm);        
        $('#modalExtraJsPlaceholder').html(modalExtraJsHtml);
        $("#itemFormModal").modal('show');
        submitItemModalFormBind(); //bind loaded form to ajax call
     }, "html");
     return false; // prevent the click propagation
   })
}
</script>

The itemForm returned from the view looks like this:

<form id="#ajax_form_modal_result" class="well" method="post" action="/update/item/{{ item.id }}">
 <div id="ajax_form_modal_result_div">
     <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal">×</button>
      <h3>Edit Item</h3>
    </div>
    <div class="modal-body">
         {% csrf_token %}
         {{form.as_p}}
    </div>
    <div class="modal-footer">
         <input class="btn btn-primary" type="submit" value="Save" />
         <input name="cancel" class="btn" type="submit" value="Cancel"/>
     </div>
    </div>
</form>

Loading and showing the modal works fine.
But now comes the second part which does not work as expected. The issue is the following. If the form does not validates, the view returns the form. The returned form should be shown again in the bootstrap modal. But the result is that ONLY the form is presented in the browser, everything else is lost. No css, no table, only the form. Quite ugly.. Thus I did not achieve to update the ajax_form_modal_result_div. Can anyone help me out here what I m doing wrong..!?

The view returns also the js function ‘submitItemModalFormBind’ which prevents the form default behavior and sends the form via ajax.

<div id="modalExtraJs">
 //ajax bind for update item form visualized via modal
 function submitItemModalFormBind(){
     var url = "{% url updateItem item.pk %}";
     $('#ajax_form_modal_result').submit(function(){
 $.ajax({
    type: "POST",
    url: "{% url updateTask item.pk %}",
    data: $(this).serialize(),
    success:function(response){
        var div = $("ajax_form_modal_result_div", response);
        $('#ajax_form_modal_result_div').html(div);
     },
     error: function (request, status, error) {
         console.log("failure");
         console.log(request.responseText);
     }

           });
          });
        return false;
       }    
</div> 
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-09T15:44:13+00:00Added an answer on June 9, 2026 at 3:44 pm

    Found a working approach (based upon this solution – and enhanced it with handling of invalid forms) and will post it for anybody who also want to use the stunning beautiful bootstrap modals with django. Major issue with the code above was that I did not correctly disabled the default behavior of the submit button and the approach for loading additional js was not a good idea. So I changed my strategy.

    On documentReady or ajaxStop event bind the click event of the hyperlinks to the modalConnect function. Note that you only need the ajaxStop function if you have some kind of ajax which updates the content of your table (which I have):

    <script type="text/javascript">
        $(document).ready(function() {
            modalConnect();
        });
    </script>
    
    <script type="text/javascript">
    $( document ).ajaxStop( function() {
        modalConnect();
    });
    </script>
    

    The modalConnect function which loads the form which we want to present in the modal and a formUpdateURLDiv:

    <script type="text/javascript">
        function modalConnect()
            {
                //unbind the click event. If not done we will end up with multiple click event bindings, since binding is done after each ajax call.
                $(".editItem").unbind('click');
                //bind the click event
                $(".editItem").click(function(ev) { // for each edit item <a>
                    ev.preventDefault(); // prevent navigation
                    var url = this.href; //get the href from the <a> element
                    $.get(url, function(results){
                      //get the form
                      var itemForm = $("#ajax_form_modal_result", results);
                      //get the update URL
                      var formUpdateURLDiv = $("#formUpdateURL", results);
                      //get the inner html of the div
                      var formUpdateURL = formUpdateURLDiv.html();
                      //update the dom with the received form
                      $('#itemFormModal').html(itemForm);
                      //show the bootstrap modal
                      $("#itemFormModal").modal('show');
                      $(document).ready(function () {
                         //bind the form to an ajax call. ajax call will be set to the received update url
                         submitItemModalFormBind(formUpdateURL);
                      });
                    }, "html");
                    return false; // prevent the click propagation
                })
            }
    </script>
    

    the formUpdateURL includes a server generated (see included view below) url to which the loaded form has to make its form submission call. We use this url to “init” the submitItemModalFormBind function:

    <script type="text/javascript">
           function submitItemModalFormBind(url){
             //bind the form. prevent default behavior and submit form via ajax instead
             $('#ajax_form_modal_result').submit(function(ev){
                 $.ajax({
                    type: "POST",
                    url: url,
                    data: $(this).serialize(),
                    success:function(response, textStatus, jqXHR){
                         var form = $("#ajax_form_modal_result_div", response);
                         //form is returned if it is not valid. update modal with returned form
                         //change this "if" to check for a specific return code which should be set in the view
                         if (form.html()) {
                            console.log('Form was invalid and was returned');
                            //update modal div
                             $('#ajax_form_modal_result_div').html(form);
                             $("#itemFormModal").modal('show');
                          }
                          //form is not returned if form submission succeeded
                          else{
                            //update the entire document with the response received since we received a entire success page and we want to reload the entire page
                            document.open();
                            document.write(response);
                            document.close();
                            //sort by modified date descending
    
                            //var notificationDiv = $("#notification", response);
                            //$('#notification').html(notificationDiv.html());
                            console.log('Form was valid and was not returned');
                            $("#itemFormModal").modal('hide');
                            }
                    },
                    error: function (request, status, error) {
                                var div = $("ajax_form_modal_result_div", request.responseText);
                                $('#ajax_form_modal_result_div').html(div);
                                //implement proper error handling
                                console.log("failure");
                                console.log(request.responseText);
                            }
                        });
                        return false;
                    });
                  }
    </script>
    

    ..and to see what is going on at the server see below the view which handles the logic:

    class UpdateTaskModalView(LoginRequiredMixin, View):
    template = 'list_management/crud/item/update_via_modal.html'
    
    def get_logic(self, request, task_id, **kwargs):
        task = get_object_or_404(Task.objects, pk=task_id)
        task_form = TaskForm(instance=task)
        context = {
                   'model_form': task_form,
                   'item': task,
        }
        return context
    
    def post_logic(self, request, task_id, **kwargs):
        task = get_object_or_404(Task.objects, pk=task_id)
        task_form = TaskForm(request.POST, instance=task)
        if task_form.is_valid():
            task = task_form.save(commit=False)
            task.modified_by = request.user
            task.save()
            messages.add_message(request, messages.INFO, 'Item "%s" successfully updated' % (task.name))
            return ('redirect', HttpResponseRedirect(reverse('show_list_after_item_update', kwargs={'list_id':task.list.pk, 'item_id':task.pk})))
        context = {
            'model_form' : task_form,
            'list': task.list,
            'item': task,
        }
        return ('context', context)
    
    def get(self, request, task_id, **kwargs):
        context = self.get_logic(request, task_id, **kwargs)
        return render_to_response(
            self.template,
            context,
            context_instance = RequestContext(request),
        )
    
    def post(self, request, task_id, **kwargs):
        post_logic_return = self.post_logic(request, task_id, **kwargs)
        if post_logic_return[0] == 'redirect':
            return post_logic_return[1]
        if post_logic_return[0] == 'context':
            context = post_logic_return[1]
            return render_to_response(
                self.template,
                context,
                context_instance = RequestContext(request),
            )
    

    ..the form template is already included in my question: ajax_form_modal_result_div, you only have to provide also the formUpdateURL. I did it via the template, which seems quite odd now that I write this post. could be easily provided via the view context.

    Voila – Django Forms with Bootstrap Modals! Spice up your UI!

    I hope this helps somebody to solve a similar problem.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

We use a custom formatter to output html form text boxes. In the case
My present use case is pretty trivial, either mutable or immutable Map will do
Use Case Show a photo uploaded by the user in a square box with
Use case: user clicks the link on a webpage - boom! load of files
Use case: I've just entered insert mode, and typed some text. Now I want
Use Case When a user goes to my website, they will be confronted with
Use case: Wanna insert custom annotation to fields in java class generated by JAXB
Use case: class MyTask(Task): queue = 'default_queue' def run(self): # do work Normally I
Use case: class A { static int s_common; public: static int getCommon () const
My use case: I am running Debian Squeeze Backport 3.2.0-0.bpo.2-amd64 over an Asus p-67

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.