一部のモデルでは、誰がどのビューにいるかを保存する必要があります。
class UsersInURL(models.Model):
users = models.ManyToManyField(User)
url = models.CharField()
# you'd probably want to use a through table and set up some expiration logic
次に、ログインしたユーザーがページを表示するたびに、このモデルを変更することを忘れないでください。ミドルウェアはこれに最適です。
class UserTrackerMiddleware(object):
def process_view(self, request, *args, **kwargs):
UsersInURL.users.through.filter(user=request.user).delete()
users_in_url, created = UsersInURL.objects.get_or_create(url=request.path)
users_in_url.users.add(request.user)
次に、ページを更新するには、サーバーとブラウザーの間で、このモデルに ping を送信し、変更が検出された場合に更新する何らかの通信を設定する必要があります。
var lastCheckedUsers = undefined;
function checkForNewUsers() {
$.get('/some-ajaxy-url/', { url: document.URL }, success: function(data) {
// you'd have to set up a view that returns active users @ url
if (lastCheckedUsers != data.users && lastCheckedUsers != undefined) {
window.location.href = window.location.href;
};
lastCheckedUsers = data.users; // store last state; refresh if modified.
})
};
setInterval(checkForNewUsers, 1000);
きっとアイデアが湧いてくるはずです。