我有中间件,它将所有http请求存储到数据库中。
我也有观察,从数据库中提取数据并将这些数据放入上下文中。
views.py
def requests(request):
http_requests = WebRequest.objects.all()
context = {
"http_requests": http_requests
}
return render(request, "requests.html", context)
当新请求进入时,如何异步更新此页面上的数据(因此,新请求应异步出现在此页面上)?我可以只使用Django功能来实现这种行为,还是需要使用一些javascript库?
答案 0 :(得分:1)
这取决于您希望在项目上花费多少时间。正如Lorenzo所说,创建一个API并让javascript框架(例如emberjs或angularjs)处理异步可能是有意义的。我不认为你可以用纯django处理这个... 如果你没有时间参加某些“黑客攻击”。您可以通过轮询网址并用响应替换整个文档来替换页面内容:
$.ajax({
type: "GET",
url: "<url_to_your_requests_view>",
success: function(response){
$('body').html(response);
}
});
这不干净,但应该是一个快速的肮脏技巧......
编辑:如果您只想更换网站的某些部分,可以将其细分为仅向页面添加元素:
$.ajax({
type: "GET",
url: "<url_to_your_requests_view>",
success: function(response){
var newlyAddedRows = // find your newly added rows through some jquery
newlyAddedRows.forEach(function(row){
$('#request-holder').append(row);
});
}
});
或与JSON
$.ajax({
type: "GET",
url: "<url_to_your_requests_api_endpoint>",
success: function(response){
var requestRows = response.requestItems
var $requestsHolder = $('#request-holder');
$requestHolder.empty();
requestRows.forEach(function(row){
requestsHolder.append('<div class="request-row">' + <visualize your data somehow> + '</div>'); //e.g. row.timestamp if you have that in your json
});
}
});