2016-07-03 12 views
3

Я попытался найти ответ, но не смог. В моем шаблоне, когда я перебираю JSONfieldКак я могу получить значения JSONfield в моем шаблоне

{% extends "electronic/electronic_base.html" %} 
{% load staticfiles %} 
{% block content %} 
{% for item in micro_all %} 
<h1>{{item.title}}</h1> 
<table class="table table-condensed"> 
<tbody> 
<tr> 
{% for key in item.attributes%} 
<td>{{key}}</td> 
{% endfor %} 
</tr> 
</tbody> 
</table> 
{% endfor %} 
{% endblock %} 

Я могу получить ключ, но не значение. Пытался использовать значение ключа, значение и печать, но по некоторым причинам он дал мне одиночные буквы даже в формате таблицы. Как я могу получить доступ к значениям в шаблоне

from django.db import models 
from django.contrib.postgres.fields import JSONField 

class Category(models.Model): 
    title = models.CharField(max_length = 200) 
    def __str__(self): 
     return self.title 

class SubCategory(models.Model): 
    title = models.CharField(max_length = 200) 
    category = models.ForeignKey(Category) 
    def __str__(self): 
    return self.title 

class Product(models.Model): 
    title = models.CharField(max_length = 200) 
    category = models.ForeignKey(Category) 
    subcategory = models.ForeignKey(SubCategory) 
    description = models.TextField(blank = True) 
    attributes = JSONField() 
    date= models.DateTimeField('дата добавления') 

    def __str__(self): 
     return self.title 

Это мой models.py

from django.shortcuts import render 
from django.http import HttpResponse 
from .models import Product, Category, SubCategory 

def electronic_micro(request): 
    micro_all = Product.objects.filter(category__title__icontains="Микросхемы") 
    return render(request,'electronic/micro_all.html', {'micro_all': micro_all}) 

def electronic_base(request): 
    return render (request, "electronic/electronic_base.html") 

Это мои взгляды

+0

Вы также можете добавить печать вашего 'JSONField'? – rsm

+0

это просто ключ: ценность функций продуктов для веб-сайта. Строки и цифры. если я попробую напечатать {{item.attributes}} в шаблоне, он напечатает все, как предполагалось. Просто не могу получить только значения, которые мне нужно заполнить в остальной части таблицы –

ответ

6

Вы должны быть в состоянии повторять его как обычный словарь:

<table> 
{% for key,value in item.attributes.items %} 
    <tr> 
     <td>{{key}}</td><td>{{value}}</td> 
    </tr> 
{% endfor %} 
</table> 
+0

Большое спасибо. Это сработало, извините за этот вопрос новичков. Не удалось решить за последние 2 дня. Спасибо за быстрый и ясный ответ. –

+0

Я счастлив, что решил вашу проблему! (Вы должны отметить ответ, как принято). Первый «элемент», который вы назначили, это только переменная, и вы могли бы использовать любое другое имя переменной. Добавленные «элементы» необходимы для распаковки словарей, так же как и в коде python 'для ключа, значение в d.items():' – rsm