Передача словаря в шаблоне в Django - PullRequest
0 голосов
/ 06 мая 2020

Мне нужно передать словарь, который я создаю в моем views.py, в свой шаблон в Django.

template

{% for server in servers %}

        <div class="hs-item set-bg" data-setbg="{% static 'img/slider-1.jpg' %}">
            <div class="hs-text">
                <div class="container">
                    <h2>The Best <span>Games</span> Out There</h2>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec malesuada <br> lorem maximus mauris scelerisque, at rutrum nulla dictum. Ut ac ligula sapien. <br>Suspendisse cursus faucibus finibus.</p>
                    <a href="#" class="site-btn">Read More</a>
                </div>
            </div>
        </div>
{% endfor %}

views.py

def get_data(request, server_name):
   server=Server.objects.get(Name=server_name)
   address = (server.IP, server.Port)
   connect = "steam://connect/"+str(server.IP)+":"+str(server.Port)
   queryset=a2s.info(address, timeout=3.0, encoding=None)
   max_player=queryset.max_players
   current_player=queryset.player_count
   current_map=queryset.map_name
   playerdata={
       'map': current_map,
       'players': current_player,
       'adress': connect,
       'max': max_player,
   }
   return HttpResponse(playerdata)

models.py

class Server(models.Model):
Name = models.CharField(max_length=100)
IP = models.TextField()
Port = models.IntegerField()
Image = models.ImageField(default='default.jpg', upload_to='server_pics')

def __str__(self):
    return str(self.Name) if self.Name else ''

То, что я пытаюсь сделать здесь, это l oop в целом серверы в моем шаблоне, затем для каждого сервера запросить указанный сервер, используя сценарий python, поместив значение в словарь, то есть player_count, current_map, et c, а затем отобразить эту информацию в моем шаблоне.

Моя проблема в том, что я не знаю, как вернуть указанный словарь в шаблон. Я уже делал нечто подобное, используя диаграмму JS, используя JsonResponse, на мой взгляд. Однако я не знаю, как вернуть сюда словарь, так как я здесь не использую JS.

Заранее благодарим за помощь

1 Ответ

1 голос
/ 06 мая 2020

Это можно сделать тремя способами:

1) Используйте ярлык render() для сопоставления контекста с HTML

2) Используйте AJAX, чтобы получить python dict / json ответ и объединить его с html, используя JS

3) Вы можете объединить два и использовать AJAX / JS, чтобы получить ответ render() от сервера. который объединяется с контекстом, а затем добавляется в DOM.

Для варианта 1 вы должны использовать ярлык return render(request, 'template.html', context), и это объединит все переменные context с вашим шаблоном везде, где {{ variable }} присутствует.

Для варианта 2 вы можете использовать jQuery ($.ajax({})) или vanilla JS (fetch()), чтобы получить ответ JSONResponse, проанализировать его в JS, а затем объединить значения индивидуально обратно в ваш HTML, где вы сочтете нужным.

Для варианта 3 вы снова должны использовать jQuery или vanilla JS, но на этот раз ваш ответ будет объединен в контексте и отображен через render(), и возвращается как целый раздел страницы, который затем можно добавить в любом месте нужной страницы.

...