Reemplazo de un personaje en la plantilla de Django

Quiero cambiar & a and en la meta descripción de mi página.

Esto es lo que intenté

 {% if '&' in dj.name %} {{ dj.name.replace('&', 'and') }} {% else %} {{ dj.name }} {% endif %} 

Esto no funciona. Todavía se muestra como &

dj.name.replace('&', 'and') No puede invocar el método con argumentos. dj.name.replace('&', 'and') escribir un filtro personalizado.

La guía oficial está aquí:

https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/#registering-custom-filters

Ok, aquí está mi ejemplo, digamos, en una aplicación llamada ‘preguntas’, quiero escribir un filtro to_and que reemplaza ‘&’ a ‘y’ en una cadena.

En / project_name / questions / templatetags, crea un __init__.py blanco, y to_and.py que va como:

 from django import template register = template.Library() @register.filter def to_and(value): return value.replace("&","and") 

En la plantilla, use:

 {% load to_and %} 

entonces podrás disfrutar de:

 {{ string|to_and }} 

Tenga en cuenta que las to_and.py nombre de directorio y el nombre de archivo to_and.py no pueden ser otros nombres.

La documentación dice así:

Debido a que Django limita intencionalmente la cantidad de procesamiento lógico disponible en el idioma de la plantilla, no es posible pasar argumentos a las llamadas de método a las que se accede desde las plantillas. Los datos deben calcularse en vistas y luego pasarse a las plantillas para su visualización.

Tendrás que editar dj.name antemano.

Editar: parece que Pythoner conoce una forma mejor: registrar un filtro personalizado . Upvote él;)