我需要将在views.py中生成的字典传递给Django中的模板。
模板
{% 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 ''
[我想在这里做的是遍历模板中的所有服务器,然后对于每个服务器,使用python脚本查询该服务器,并将值放在字典中,即player_count,current_map等,然后在我的模板中显示这些信息。
我的问题是,我不知道如何将所述字典返回到模板。我已经通过使用ChartJS在视图中使用JsonResponse
完成了类似的操作。但是,我不知道如何在这里返回字典,因为我在这里不使用JS。
感谢您的帮助
1)使用render()
快捷方式将上下文映射到HTML
2)使用AJAX获得python dict / json响应,并使用JS将其合并为html
3)您可以将两者结合起来,并使用AJAX / JS从与上下文合并的服务器中获得render()
响应,然后将其附加到DOM。
对于选项1,您将使用return render(request, 'template.html', context)
快捷方式,并且将所有context
变量合并到模板中,无论存在{{ variable }}
的位置。
对于选项2,您可以使用jQuery($.ajax({})
)或普通JS(fetch()
)来获取JSONResponse,将其解析为JS,然后将值分别合并回到您认为合适的HTML中。 >
对于选项3,您将再次使用jQuery或Vanilla JS,但是这次您的响应将通过render()
进行上下文合并和呈现,并作为页面的整个部分返回,然后可以将其追加到页面的任何位置想要。