2017-04-19 88 views
0

经过大量的研究,我仍然没有找到如何去做:我的目的是能够将键/值中的json分离出来,只显示它看起来像什么对我来说是必要的(例如标题,作者......)。这是一个Django网站。 那我这样做:JSONField Django模板并没有告诉我我去了什么

在models.py

class Production(models.Model): 
    titre = models.CharField(max_length=255, blank=True) 
    publis = JSONField() 
    def __str__(self): 
     return '%s' % (self.titre) 
    class Meta: 
     db_table = 'Production' 

在Views.py

def post_json(request): 
    posts = Production.objects.all() 
    return render(request, 'appli/post_json.html', {'posts': posts}) 

*和模板:post_json.html *

这让我完全的json数据

{% for post in posts %} 
    <div> 
     <p>aa = {{ post.publis }}</p> 
    </div> 
    {% endfor %} 

而这也正是我想只显示作者

<h1>Publications lalala</h1> 
     {% for post in posts %} 
       aa = {{ post.publis }} 
      <p> Num : {{ aa.UT }}</p> 
      <p>Auteur : {{ aa.AU }} </p> 
     {% endfor %} 

我的网页上显示: enter image description here

预先感谢您的帮助(对不起,如果英语有错我是法国人)

+0

“我的目的是希望能够到我的JSON的键/值分开,只显示它似乎需要我”:其实没有什么能像涉及到“JSON”对象 - 在运行时,'post.publis '是一个普通的Python字典,所以通常查找规则适用于您的模板(即:'post.publis.UT'将被解析为'post.publis [“UT”]')。 –

回答

1

要在Django模板中使用post.publis中的密钥,请使用常规的点查找,例如, {{ post.publis.UT }}

{% for post in posts %} 
    <p>Num : {{ post.publis.UT }}</p> 
    <p>Auteur : {{ post.publis.AU }} </p> 
{% endfor %} 

aa = {{ post.publis }}在你的模板不分配给post.publisaa。如果您想防止重复post.publis,则可以使用with标记。

{% for post in posts %} 
    {% with aa=post.publis %} 
    <p>Num : {{ aa.UT }}</p> 
    <p>Auteur : {{ aa.AU }} </p> 
    {% endwith %} 
{% endfor %} 
+0

“要访问JSON字段中的键”:实际上在这一点上,它不是'JSONField',而是一个普通的python字典......(好吧,我认为学究文,但至少在技术上是正确的 - 正如我们都知道的是“最好的一种正确的“) –

+1

@brunodesthuilliers因为问题与字段类型无关,我已经从答案中删除了对JSONField的提及。 – Alasdair

+0

非常感谢你!我曾尝试类似的东西。然而,它以前没有奏效。 –

相关问题