从 Ajax GET 方法接收数据后,使用 Django Listview 类重新加载页面
Posted
技术标签:
【中文标题】从 Ajax GET 方法接收数据后,使用 Django Listview 类重新加载页面【英文标题】:Reload page with Django Listview class after receiving data from Ajax GET Method 【发布时间】:2017-11-19 19:17:07 【问题描述】:我正在使用 js 日历选择器插件将日期值传递给 django 视图,并根据它应该将新视图呈现到同一网页的日期。因为在这个视图中我从不同的表中提取大量数据,所以我使用 ListView 类。
问题是,当我在 listview 中使用 get 函数时,我能够捕获从 ajax 传递的数据。如何将该数据传递给 get_context_data 以重新生成上下文并重新加载页面?
谢谢
这是我的 js:
<script type="text/javascript">
$(function()
var start = moment().subtract(29, 'days');
var end = moment();
function cb(start, end)
$('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
$.ajax(
type: 'GET',
url: "/csr/summary/",
data:
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
from_date: from_date,
to_date: to_date,
,
success: function (response)
);
console.log("done here");
$('#reportrange').daterangepicker(
startDate: start,
endDate: end,
ranges:
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
, cb);
cb(start, end);
);
</script>
这是我的观点:
class CsrView(generic.ListView):
template_name = 'dash/csr.html'
context_object_name = 'csr_list'
from_date = ""
to_date = ""
def get(self, request, *args, **kwargs):
self.from_date = self.request.GET.get("from_date", "")
self.to_date = self.request.GET.get("to_date", "")
print "Django get method getting:", self.from_date, " - ", self.to_date
return super(CsrView, self).get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super(CsrView, self).get_context_data(**kwargs)
# if self.request.method == "GET":
# print "get method triggered"
# self.from_date = self.request.GET.get("from_date", "")
# self.to_date = self.request.GET.get("to_date", "")
# context['testing'] = "lalala" + self.from_date
context['title'] = "CSR"
context['other_stuff'] = .....
【问题讨论】:
你在 GET 请求中使用 CSRF 做什么? 【参考方案1】:从get方法调用super时,get_context_data方法应该按照超类的super方法调用。
查看下面的url,您将在get方法的最后一个context = self.get_context_data()
中看到
https://ccbv.co.uk/projects/Django/1.11/django.views.generic.list/ListView/#get
【讨论】:
知道了,现在我也可以获取 get_context_data 中的数据了,但是如何使用新数据重新加载页面呢?谢谢 为什么要重新加载页面?如果您显示分页等数据,我认为您应该使用 js 附加数据 我没有为此使用分页。这假设是一个简单的 get 方法。但是由于我在js中使用了这个日历插件,所以我必须使用js来创建一个get请求,并且这个请求必须将数据传递给django view并重新加载页面。我对 js 和 ajax 很陌生,所以我想知道最好的方法是什么。以上是关于从 Ajax GET 方法接收数据后,使用 Django Listview 类重新加载页面的主要内容,如果未能解决你的问题,请参考以下文章