Django / Python:在模板中使用json.loads

时间:2017-07-13 11:52:40

标签: python json django templates

我试图在我的模板中使用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)}}

问题出现了。

我怎么能解决这个问题?

谢谢你们。

4 个答案:

答案 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>

打印所有数据。但是出现了一个小问题。它没有以适当的方式填充阵列。尽管如此,所有表格中的所有数据都会打印出来。

:)