我正在努力从Watson的NLU API打印格式化的JSON响应。我正在使用Python 2.7和Django 1.11。我的views.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})
我的analysis.html看起来像这样:
<div class="container text-left">
<p>{{ data }}</p>
</div>
所有这一切的结果都是数据,JSON括号打印在一行上,如下所示:
{“semantic_roles”:[{“action”:{“text”:“are”,“verb”:{“text”:“be”,“tense”:“present”},“normalized “:”是“},”句子“:”蝙蝠侠和超人正在与坏人战斗“,......”关键词“:[{”相关性“:0.931284,”文字“:”坏人“},{”相关性“:0.790756,”text“:”超人“},{”相关性“:0.752557,”文字“:”蝙蝠侠“}}}
如果我在for循环中运行
<div class="container text-left">
{% for d in data %}
<p>{{ d }}</p>
{% endfor %}
</div>
它只是在每行的字符上打印
{
“
小号
ë
米
... 的
建议{{data}}是一个字符串,仅此而已。
显然,我从根本上误解了一些事情。它是关于json.dumps(包括'indent = 2')如何工作或如何在我的模板中正确处理它的东西。我怀疑后者因为通过'data'传递的信息显然包含所有JSON语法。如果我将结果上面的一行结果放在JSON验证器中,它会完全重新格式化和验证。
那里有一个完整的新手的任何帮助?感谢。
答案 0 :(得分:0)
为什么你甚至要解析你的回复。 json.dumps
将dict
对象转换为字符串。您可以直接将其用作return render(request, 'analysis.html', {'data': response})
。
答案 1 :(得分:0)
如果要访问dict对象中键的值,只需要这样做(对于您的示例数据),
{{ response.semantic_roles }}
如果模板上下文中存在semantic_roles
,那么response
将被解释为文字字符串而不使用变量“semantics”的值。 from django.template.defaulttags import register
@register.filter
def get_item(dictionary, key):
return dictionary.get(key)
是上下文变量的名称。
或者,如果您想使用循环获取dict对象中每个键的值,您可能需要为模板创建自定义过滤器,
{% for key in response %}
{{ response|get_item:key }}
{% endfor %}
在你的模板中,
<a href="#" id="abc">jhg</a>
<a href="#" id="myLink">jhhghj</a>
<script type="text/javascript">
document.getElementById("myLink").onclick = function() {
document.getElementById("abc").href="xyz.php";
return false;
};
</script>
当然,请确保在模板标记上调用load,以便渲染器可以看到它们。
以下是一些有用的链接,