无法获取Django模板以打印格式化的JSON

2024-10-08 19:26:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力从Watson的NLU API打印格式化的JSON响应。我使用的是python2.7和django1.11。我的视图.py看起来像这样:

def nlu_analysis(request):
    if request.method == 'POST':
        text2send = request.POST.get('text2send')
        natural_language_understanding = NLUV1(
            version='2017-02-27',
            username='####',
            password='####')

    response = natural_language_understanding.analyze(
        text=text2send,
        features=[features.Entities(), ... features.SemanticRoles()])

        parsedData = json.dumps(response, indent=2)
    return render(request, 'analysis.html', {'data': parsedData})

我的分析.html看起来像这样:

^{pr2}$

所有这些操作的结果是数据,JSON括号打印在一行上,如下所示:

{“语义角色”:[{“action”:{“text”:“are”,“verb”:{“text”:“be”,“时态”:“present”},“normalized”:“be”},“句子”:“蝙蝠侠和超人在与坏人战斗”关键词“[{“关联性”:0.931284,“文本”:“坏人”},{“关联性”:0.790756,“文本”:“超人”},{“关联性”:0.752557,“文本”:“蝙蝠侠”}]}

如果我在这个循环中运行

<div class="container text-left">
    {% for d in data %}
        <p>{{ d }}</p>
    {% endfor %}
</div>

它只是在每行的字符上打印

{

s

e

m

...

暗示{data}}是一个字符串,仅此而已。在

很明显,我根本上误解了什么。或者是关于如何json.dumps文件(包括'indent=2')工作或如何在我的模板中正确处理它。我怀疑是后者,因为通过'data'传递的信息显然包含了所有的JSON语法。如果我把上面的一行结果放入一个JSON验证器,它将重新格式化并完美地验证。在

对一个菜鸟有什么帮助吗?谢谢。在


Tags: text文本jsondataresponserequestanalysisnatural
2条回答

如果要访问dict对象中键的值,只需这样做(对于示例数据)

{{ response.semantic_roles }}

这里,semantic_roles将被解释为一个文本字符串,并且不使用变量“semantics”的值(如果模板上下文中存在)。而response是上下文变量的名称。在

或者,如果您想使用循环获取dict对象中每个键的值,则可能需要为模板创建一个自定义过滤器

^{pr2}$

在你的模板中

{% for key in response %}
{{ response|get_item:key }}
{% endfor %}

当然,请确保在模板标记上调用load,以便渲染器可以看到它们。在

这里有一些有用的链接

你为什么还要分析你的回答呢。json.dumpsdict对象转换为字符串。您可以直接将其用作return render(request, 'analysis.html', {'data': response})。在

相关问题 更多 >

    热门问题