我试图在我的模板中使用json.loads来获取python的词典。但不幸的是,我遇到了同样的错误:
Could not parse the remainder: ' = json.loads(entry.saved_data)' from 'everyEntry = json.loads(entry.saved_data)'
以下是模板中的代码:
<tbody>
<tr>
{% for entry in entries %}
{{everyEntry = json.loads(entry.saved_data)}}
{{ everyEntry.items}}
{% for clef, valeura in headersLoop %}
{% for chiave, valore in everyEntry %}
{% if clef = chiave %}
<td>
<p>{{clef}} {{valore}}</p>
</td>
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
</tbody>
在这一行:
{{everyEntry = json.loads(entry.saved_data)}}
问题出现了。
我怎么能解决这个问题?
谢谢你们。
答案 0 :(得分:3)
方法1 - 定义自定义模型方法
在models.py,
中创建自定义方法class YourModel(models.Model):
# your stuff
def entry_saved_data(self):
return json.loads(self.saved_data)
方法2 - 使用模板标记
您可以使用模板标记。如果您现在知道模板标记,可以在docs
中找到它@register.simple_tag
def entry_saved_data(value):
return json.loads(value)
在模板中使用它,
{% load tags %}
{% entry_saved_data entry.saved_data as everyEntry %}
你现在在everyEntry变量中有json反序列化数据。
答案 1 :(得分:2)
不要在模板中写逻辑。
在视图中执行json.load
并通过上下文将其传递给模板。
答案 2 :(得分:0)
见:(functions in django templates)
django中的模板不允许调用任意函数,这是我所知道的设计。
话虽这么说,您也许可以创建一个可以满足您需求的自定义模板标签。
https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/
答案 3 :(得分:0)
感谢bruno和Aniket,我找到了解决方案。
首先我创建了一个返回dict项的方法,例如bruno example:
class YourModel(models.Model):
`def entry_saved_data(self):
return json.loads(self.saved_data)
然后我把这个循环变成了我的template.html:
<tr>
{%for entry in entries%}
{%for cle, valeur in entry.all_form_entry_json%}
{%for key, valor in headersLoop%}
{%if key == cle%}
<td> {{valeur}}</td>
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
</tr>
打印所有数据。但是出现了一个小问题。它没有以适当的方式填充阵列。尽管如此,所有表格中的所有数据都会打印出来。
:)