成功进行Ajax POST操作后,jinja为什么不重新渲染我的模板

时间:2018-12-08 04:42:53

标签: django django-templates django-views

我被告知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 BELOW METHOD打印内容,但这对我来说并不理想,(因为我需要其他功能,因此我需要对RIGHTCONTAINER中的list-group-items进行操作,会在我的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,
        })

0 个答案:

没有答案