Почему jinja не рендерит мой шаблон после успешной операции Ajax POST? - PullRequest
0 голосов
/ 08 декабря 2018

Мне сообщили, что функция success AJAX отвечает за выполнение всего после отправки данных, включая обновление страницы для отображения любых данных, отправленных бэкэндом в ответ на сообщение.

Когда янапечатал success: function (res) {console.log (res)} Я могу видеть мой недавно сгенерированный HTML в журнале консоли, где заполнен HTML DIV, где у меня был цикл Jinja FOR.

<div id="RIGHTCONTAINER" class="list-group" style="height:625px; overflow-y: scroll">
  {% for model in model_list %}
      <a href="#" data-set="{{ model_list|length }}" class="list-group-item py-0 list-group-item-action">{{ model }}</a>
  {% endfor %}
</div>

Я удивлен, что console.log может видеть возвращенные данные, генерировать сгенерированный html, но теперь мне нужно как-то отобразить это в браузере, если я использую ajax.

Однако я смог напечатать свой контент, используя ajax НИЖЕ МЕТОДА, но это НЕ идеально для меня, (потому что у меня есть дополнительные функции, мне нужно вызывать операции над элементами группы списков внутри моего RIGHTCONTAINER, которая станет множественными вложенными запросами ajax внутри моей функции успеха ajax, и я оказался в углу) .

$.ajax({
    type:'POST',
    url:"home/view_results/onclick/",
    data:{
        selected_item:item_index,        // Sending users selection
        csrfmiddlewaretoken:"{{ csrf_token }}"
    },
    dataType:"text json",
    success: function(resp){
        console.log(resp);        // console.log is able to print HTML

        $("#RIGHTCONTAINER").append(resp.test_history)
        $("#RIGHTCONTAINER > a").removeClass("active");
        $("#RIGHTCONTAINER > a").hide();
        $("#RIGHTCONTAINER").empty();
        for(i=0; i<resp.model_list.length; i++){
            $("#RIGHTCONTAINER").append('<a href="#" class="list-group-item py-0 list-group-item-action">'+resp.model_list[i]+'</a>');
        }
        $('#message').html("<h3>Data Submitted!</h3>") 
    }
})  

Я думал, что когда мой запрос AJAX сделал успешную публикацию, он называетсяновая функция по ссылке url:"home/view_results/onclick/" и моя urls.py содержали следующую строку:

URLS.py

#app/urls.py
from django.urls import path, re_path
from . import views
results = views.View_Items()
urlpatterns=[
        ...
        ...
        re_path(r'view_results/onclick/$', results.render_view_items_again, name = 'view_results_new'),  # NEW
]

и мою функцию рендеринга, отображаемую приAJAX называется это:

VIEWS.py

#app/views.py
from django.shortcuts import render
class View_Items():

   def render_view_items_again(self, request):
       selected_item_by_user = request.POST.get('selected_item')
       # print(selected_item_by_user)
       models = self.get_all_models(selected_item_by_user)  #Fetches a list.
       # print(models)                     #Tested if my list is populated.
       return render(request, 'view_results/View_items.html',{
               'model_list':models,
        })
...