1

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

我正在ajax get单击日历prev button调用另一个 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类似于上面的模板,除了显示成功警报。它还使用名为 django 的视图'index.html::success'来填充日历。current_eventsindex()

django 视图是

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

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

代替 prev_month.html::success

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

有人可以帮我弄清楚为什么会这样吗?

4

1 回答 1

1

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

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

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

请参阅http://api.jquery.com/jQuery.get/上的 jQuery.get 文档

这应该使用您的fullCalendar()方法并将其data作为新值提供给events.

查看 JavaScript 错误控制台,看看格式是否data会导致问题;如果是这样,您将不得不将结果作为 JSON 返回到prev_month().

于 2012-04-13T12:35:01.903 回答