由 Django View 在 jquery ajax get call 上呈现的错误 HTML 模板



我的django应用程序的index.html页面使用jquery fullcalendar,由一个名为index()的django视图填充,该视图使用simplejson转储包含当前月份所有日期事件的数组。该方法呈现index.html模板。

我正在单击日历的prev button进行ajax get调用,该调用另一个 django 视图prev_month()。此方法计算上个月的事件数组并将其转储,最后呈现不同的模板'prev_month.html'

def prev_month(request,year,month):
    ....
    prev_events=[]
    #populates array by making db calls
    return render_to_response('prev_month.html',{'prev_events':prev_events})

prev_month.html

...
<script>
    $(document).ready(function() {
        $('#calendar').fullCalendar({
       events: {{prev_events|safe}}
    });
        $('.fc-button-prev').click(function(){
          var d=$('#calendar').fullCalendar('getDate');
          var month=d.getMonth()+1;
          var year=d.getFullYear();
          $.ajax({url:'/myapp/prev_month/'+year+'/'+month,type:"GET",
  success:function(){
                    alert('prev_month.html::success');
},
});
});
</script>

模板index.html与上面的模板类似,只是成功警报显示'index.html::success'。它还使用名为 index() 的 django 视图传递的current_events填充日历。

django 视图是

def index(request):
   ...
   #creates events array and jsondump
   return render_to_response('index.html',{'current_events':events_array})

当我进入索引页面时,日历显示当月的所有事件。当点击上一个按钮时,执行 django 视图 prev_month() 。但由于某种原因,呈现的模板是index.html而不是prev_month.html。这从显示index.html::success的成功警报中可以明显看出

而不是prev_month.html::success

因此,不会显示上个月的事件。

有人可以帮助我弄清楚为什么会发生这种情况吗?

不使用来自 AJAX 调用的响应。

你必须改变你的$.ajax()调用,以便成功函数实际绑定数据(即来自 Django 服务器的响应);我们在示例中使用$.get()使其更易于阅读:

$.get('/myapp/prev_month/'+year+'/'+month, function(data) {
  $('#calendar').fullCalendar({events: data});
});

请参阅 jQuery.get 的文档,请访问 http://api.jquery.com/jQuery.get/

这应该使用您的 fullCalendar() 方法,并将收到的data作为 events 的新值。

查看 JavaScript 错误控制台,看看 data 的格式是否会导致问题;如果是这样,则必须在 prev_month() 中以 JSON 的形式返回结果。

最新更新