【问题标题】:Passing a dictionnary in a template in Django在Django的模板中传递字典
【发布时间】:2020-08-21 23:26:23
【问题描述】:

我需要将我在 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。

提前感谢您的帮助

【问题讨论】:

  • 请求的类型是什么?如果它是GET 并且您想要渲染模板,那么使用render 而不是HttpResponse。像这样的东西 - return render(request, 'your_template.html', context=playerdata)
  • 不会将我重定向到另一个页面吗? Jeet 谢谢 ger.s.brett 我去看看!
  • render 不会重定向。它呈现模板。如果你的意思是,它会刷新整个页面,那么是的。如果您想在不刷新整个页面的情况下加载它,请使用ajax 调用。您可以参考此question 了解如何在 ajax 调用后更新 django 模板

标签: python html django web


【解决方案1】:

这三种方法是:

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({})) 或 vanilla JS (fetch()) 来获取 JSONResponse,在 JS 中解析它,然后将值单独合并回您认为合适的 HTML。

对于选项 3,您将再次使用 jQuery 或 vanilla JS,但这次您的响应将通过 render() 进行上下文合并和呈现,并作为页面的整个部分返回,然后您可以将其附加到页面的任何位置你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    相关资源
    最近更新 更多