【问题标题】:How to read dictionaries in Django Templates如何在 Django 模板中阅读字典
【发布时间】: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

标签: django python-2.7 dictionary django-templates


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2019-10-22
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多