У меня есть модель с именем VisitorInfo в models.py, которая выглядит следующим образом:
class VisitorInfo(models.Model):
#To maintain clarity i am not showing all the fields.
visitor_id = models.CharField(max_length=120)
pages_visited = models.ManyToManyField(Page,blank=True)
time_zone = models.CharField(max_length=120, null= True, blank=True)
ip = models.CharField(max_length=120, null= True, blank=True)
device_type = models.CharField(max_length=120, null=True)
Ниже приведен вид, в котором я использую эту модель.
class Live_Now(LoginRequiredMixin, TemplateView):
template_name = 'dashboard/live_now.html'
def get_context_data(self, **kwargs):
context = super(Live_Now, self).get_context_data(**kwargs)
search = self.request.GET.get('q')
if search:
if VisitorInfo.objects.filter(Q_filter).filter(active=True).count() >0:
context['list_no'] = VisitorInfo.objects.filter(Q_filter).filter(active=True)
else:
context['list_no'] = "N"
return context
Что мне нужно сделать, как только загрузится страница live_now.html и запустится представление Live_Now, откроется новая вкладка со следующим URL-адресом.
url = 54.161.109.227:5000/visitor_id
Я знаю, что для открытия новой вкладки мне нужно записать скрипт в live_now.html, который выглядит следующим образом.
<script type='text/javascript>
window.open(url); // Above written url
</script>
Но как мне получить visitor_id посетителя во время выполнения. Получение visitor_id - это задача для функции python, а открытие новой вкладки - это функция javascript. Как передать значение переменной python в программе javascript?
На данный момент я получаю visitor_id первого посетителя в посетителях, и для этого я написал следующую функцию.
def myfunc():
visitors= VisitorInfo.objects.all()
for visitor in visitors[:1]:
visitorId = visitor.visitor_id
return str(visitorId)
PS: Большинство современных браузеров не позволяют открывать новое окно / всплывающее окно и дают пользователю свободу выбора. Возможно, вам понадобится использовать световой короб на основе CSS, например окна модели.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы делаете это намного сложнее, чем нужно. Если вам нужно, чтобы ваш JS имел определенное значение, передайте его туда.
def get_context_data(self, **kwargs):
... existing code ...
context['visitor_id'] = Visitor.objects.first().user_id
return context
...
url = "54.161.109.227:5000/{{ visitor_id }}";
window.open(url)
Конечно, вы можете так же легко передать в шаблон весь объект Visitor и выполнить {{ visitor.user_id }}, решать вам.
Сэр @danielroseman, что, если я хочу передать этот visitor_id в отдельный файл javascript? Как я могу этого добиться?
в функции document.load вызовите ajax, который вызовет указанную выше функцию, чтобы вернуть идентификатор посетителя, и вызовет функцию window.open для вызова URL-адреса