Por lo que puedo ver, no hay forma de comprobar si un objeto es una instancia de lista en Jinja2. En primer lugar, ¿es correcto y, en segundo lugar, alguien ha implementado una prueba/extensión personalizada en Jinja2? Cualquier ayuda sería genial.Prueba de una lista en Jinja2
Respuesta
Puede hacer esto fácilmente con un filtro personalizado en jinja2.
En primer lugar se crea el método de ensayo:
def is_list(value):
return isinstance(value, list)
y añadirlo como un filtro personalizado:
j = jinja2.Jinja2(app)
j.environment.filters.update({
'is_list': is_list,
})
Jinja tiene muchas pruebas incorporadas. Probablemente estés buscando iterable.
{% if var is iterable %}
lo hice como esto {% if var is iterable and var is not string %}
en mi caso '{% if var is string%}' funcionó perfectamente; gracias. – berto
En mi configuración, me gustaría que un valor a ser una cadena o lista de cadenas que entran en la plantilla de Jinja. Entonces, realmente, lo que me importaba no era la cadena frente a la lista, sino el elemento individual frente a los elementos múltiples. Esta respuesta podría ayudar si su caso de uso es similar.
Dado que no hay una prueba integrada para "is list?" que también rechaza cadenas, tomé prestado un patrón del diseño de la API y envolví los objetos individuales en una lista en el lado de Python, luego verifiqué la longitud de la lista en el lado de Jinja.
Python:
context = { ... }
# ex. value = 'a', or ['a', 'b']
if not isinstance(value, list):
value = [value]
context['foo'] = value
Jinja:
{% if foo|length == 1 %}
single-item list
{% elif foo|length > 1 %}
multi-item list
{% endif %}
Y si todo lo que quiere hacer es agregar un separador de elementos para fines de visualización, se puede omitir la comprobación de longitud explícita y justo {{ value|join(', ') }}
.
Parece que esta respuesta recibió un voto negativo por alguna razón. Funciona bien para mí, pero siéntase libre de agregar un comentario si algo no funciona para usted. –
- 1. ¿Cómo se ordena una lista en Jinja2?
- 2. Obtener longitudes de una lista en una plantilla de jinja2
- 3. Cómo accedo parte de una lista de Jinja2
- 4. ¿Cómo devuelvo una lista como una variable en Python y uso en Jinja2?
- 5. En Jinja2, ¿cómo se prueba si una variable no está definida?
- 6. zip (list1, list2) en Jinja2?
- 7. Pase argumento de lista a un nodo de llamada en una extensión Jinja2
- 8. Python: ¿cómo formateo una fecha en Jinja2?
- 9. Prueba del elemento en lista
- 10. Redondeo en soportes de jinja2
- 11. webapp2 + jinja2: ¿Cómo puedo obtener uri_for() trabajando en jinja2-views
- 12. Prueba si una lista contiene otra lista con Python
- 13. compare dos variables en la plantilla jinja2
- 14. ¿Cómo puedo llamar indirectamente una macro en una plantilla Jinja2?
- 15. Cómo incluir una plantilla con una ruta relativa en Jinja2
- 16. ¿Iterar el objeto en Jinja2?
- 17. Jinja2 en Google App Engine
- 18. concat multiple block en jinja2?
- 19. Jinja2: ¿Cómo crear una matriz javascript multidimensional?
- 20. variable de pasar a una macro en Jinja2
- 21. ¿Mako o Jinja2?
- 22. Django: ¿Cambia a Jinja2?
- 23. múltiples bloques de mismo nombre en Jinja2
- 24. jinja2: variables de escape html
- 25. Jinja2 y JSON
- 26. Obtener un parámetro de solicitud en Jinja2
- 27. jinja2 + reStructured Markup
- 28. las variables Jinja2 anidado
- 29. Suprime la salida "Ninguno" como una cadena en Jinja2
- 30. ¿Cómo pluralizar un nombre en una plantilla con jinja2?
Una cadena también es iterable, por lo que no funcionará – pors
También noté la prueba de 'secuencia', pero también considera que una cadena es una secuencia. –