into example array django django-templates django-template-filters

example - Plantillas Django-split string to array



split list python (5)

Tengo un campo de modelo, que almacena una lista de URL (sí, lo sé, está mal) como url1/nurl2/nurl3<...> . Necesito dividir el campo en una matriz en mi plantilla, así que creé el filtro personalizado:

@register.filter(name=''split'') def split(value, arg): return value.split(arg)

Lo uso de esta manera:

{% with game.screenshots|split:"/n" as screens %} {% for screen in screens %} {{ screen }}<br> {% endfor %} {% endwith %}

pero como puedo ver, split no quiere funcionar: obtengo un resultado como url1 url2 url3 (con url1 url2 url3 si miro la fuente). ¿Por qué?


Además de si su solución original fue el enfoque correcto, creo que el código original no funcionó porque el significado de /n no es el mismo en el código de Python que en HTML: en el código de Python significa el carácter de nueva línea escapado, en HTML es solo los dos caracteres separados / y n . Así que pasar como parámetro de entrada /n de la plantilla HTML al código de Python es equivalente a la división en la cadena de Python //n : un literal / seguido de una n .


Django omite deliberadamente muchos tipos de plantillas para desanimarlo a que haga demasiado procesamiento en la plantilla. (Desafortunadamente, las personas generalmente solo agregan estos tipos de plantillas de etiquetas).

Este es un ejemplo perfecto de algo que debería estar en su modelo y no en su plantilla.

class Game(models.Model): ... def screenshots_as_list(self): return self.screenshots.split(''/n'')

Luego, en su plantilla, simplemente lo hace:

{% for screen in game.screenshots_as_list %} {{ screen }}<br> {% endfor %}

Mucho más claro y mucho más fácil de trabajar.


Hm, he resuelto en parte este problema. Cambié mi filtro a:

@register.filter(name=''split'') def split(value, arg): return value.split(''/n'')

¿Por qué no funcionó con el código original?