如何在 Django 模板中阅读字典

Posted

技术标签:

【中文标题】如何在 Django 模板中阅读字典【英文标题】:How to read dictionaries in Django Templates 【发布时间】:2019-12-01 23:44:42 【问题描述】:

我正在使用 Django 上的 STRIPE Gateway Payment,但在访问模板上的字典时遇到了问题。

我已经在纯 python 上做了并且工作正常。

这是我的看法

@login_required
def invoice_details(request):
    customer = stripe.Customer.list(email=request.user)
    return render(request, 'payment.html', customer)

在模板中这是我的代码:

<h2>% trans "User details" %</h2>
% for actual_customer in customer.data %
  ID:  actual_customer.id 
% endfor %

上面的代码不起作用,感谢任何帮助

【问题讨论】:

我建议你添加一个模板标签来获取字典项。显示here 【参考方案1】:

通常只输出整个上下文变量以查看是否有任何数据以及您可以使用哪些键会很有帮助。

<h2>% trans "User details" %</h2>
 customer 
% for actual_customer in customer.data %
    ID:  actual_customer.id 
% endfor %

用上面的方法渲染你的模板会告诉你 customer 不会返回任何东西。那是因为customer 是您作为上下文传递的变量名。如果您希望客户成为关键,则必须如下修改您的视图

@login_required
def invoice_details(request):
    context = dict()
    context['customer'] = stripe.Customer.list(email=request.user)
    return render(request, 'payment.html', context)

【讨论】:

照你说的做,输出不好,只能得到这个dict里面的principal tree: User details "data": [], "has_more": false, "object": "list", "url": "/v1/customers" 【参考方案2】:

问题出在视图函数中,因为我加载的是用户实例而不是用户名,这就是完美的工作方式:

@login_required
def invoice_details(request):
    customer = stripe.Customer.list(email=request.user.username)
    context = 
        'customer': customer,
    
    return render(request, 'payment.html', context)

【讨论】:

以上是关于如何在 Django 模板中阅读字典的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 模板中访问字典列表

如何在 django 模板中访问字典值

如何在 django 模板中迭代字典的列表值

如何在 Django 模板中多次遍历同一个字典?

如何在 Django 模板中获取字典键和值?

在 Django 模板中,如何指定本身就是属性的字典键?