una saber los esta elementos ejemplo diccionarios diccionario declarar declaracion comparar como clave acceder python django json

python - saber - Acceso al diccionario por clave en la plantilla de Django



declarar un diccionario python (4)

Estoy pasando un diccionario de mi vista a una plantilla. Así que {"key1":"value1","key2":"value2"} se pasa y al pasar por la clave, los pares de valores están bien, sin embargo, no he encontrado una solución elegante para acceder directamente en la vista desde una clave específica , diga "key1" por ejemplo bu json.items ["key1"]. Podría usar algunas declaraciones if / then, pero preferiría hacerlo directamente, ¿hay alguna manera?

Aquí está el código de bucle en la plantilla html:

{% for key, value in json.items %} <li>{{key}} - {{value}}</li> {% endfor %}


Como sugiere @Alasdair, puede usar un filtro de plantilla. En su directorio templatetags , cree el siguiente archivo dict_key.py :

from django.template.defaultfilters import register @register.filter(name=''dict_key'') def dict_key(d, k): ''''''Returns the given key from a dictionary.'''''' return d[k]

Luego, en tu HTML, puedes escribir:

{% for k in json.items %} <li>{{ k }} - {{ json.items|dict_key:k }}</li> {% endfor %}


El lenguaje de plantilla de Django permite buscar las claves del diccionario de la siguiente manera:

{{ json.key1 }}

Consulte los documentos de plantilla sobre variables y búsquedas .

El lenguaje de plantilla no proporciona una forma de mostrar json[key] , donde la key es una variable. Puede escribir un filtro de plantilla para hacer esto, como se sugiere en las respuestas a esta pregunta sobre desbordamiento de pila .


Para superar este problema, podrías intentar algo como esto:

def get_context_data(self, **kwargs): context[''cart''] = [] cart = Cart() cart.name = book.name cart.author = book.author.name cart.publisher = book.publisher.name cart.price = 123 cart.discount = 12 cart.total = 100 context[''cart''].append(cart) return context class Cart(object): """ Cart Template class This is a magic class, having attributes name, author, publisher, price, discount, total, image You can add other attributes on the fly """ pass By this way you can access your cart something like this: {% for item in cart %} <div class="jumbotron"> <div> <img src="{{item.image}}" /> <div class="book_name"> <b>{{item.name}}</b></div> <div class="book_by"><i>{{item.author}}</i></div> <span>Rs. {{item.price}}</span> <i>{{item.discount}}% OFF </i> <b>Rs. {{item.total}}</b> {% endfor %}


Por ejemplo, para enviar el diccionario siguiente dict = {''name'':''myname'',''number'':''mynumber''}

vistas: return render(request, self.template_name, {''dict'': dict})

Para representar el valor en la plantilla html: <p>{{ dict.name }}</p>

Imprime ''myname''