Digamos que tengo una plantilla
<html>
<div>Hello {{name}}!</div>
</html>
Mientras lo prueba, sería útil definir el valor de la variable sin tocar el código de Python que invoca esta plantilla. Entonces estoy buscando algo como esto
{% set name="World" %}
<html>
<div>Hello {{name}}!</div>
</html>
¿Existe algo así en Django?
django
django-templates
Alexis
fuente
fuente
Crea una etiqueta de plantilla:
La aplicación debe contener un
templatetags
directorio, al mismo nivel quemodels.py
,views.py
etc. Si aún no existe, créelo; no olvide el__init__.py
archivo para asegurarse de que el directorio se trate como un paquete de Python.Cree un archivo denominado
define_action.py
dentro del directorio templatetags con el siguiente código:Nota: El servidor de desarrollo no se reiniciará automáticamente. Después de agregar el
templatetags
módulo, deberá reiniciar su servidor antes de poder usar las etiquetas o los filtros en las plantillas.Luego, en su plantilla, puede asignar valores al contexto de esta manera:
fuente
add
:{% define counter|add:1 as counter %}
. Del mismo modo para otras operaciones.Una forma alternativa que no requiere que coloque todo en el bloque "con" es crear una etiqueta personalizada que agregue una nueva variable al contexto. Como en:
Esto te permitirá escribir algo como esto en tu plantilla:
Tenga en cuenta que la mayor parte de esto fue tomado de aquí
fuente
Hay trucos como el descrito por John; sin embargo, el lenguaje de plantilla de Django por diseño no admite el establecimiento de una variable (consulte el cuadro "Filosofía" en la documentación de Django para plantillas ).
Debido a esto, la forma recomendada de cambiar cualquier variable es tocar el código de Python.
fuente
La mejor solución para esto es escribir una costumbre
assignment_tag
. Esta solución es más limpia que usar unawith
etiqueta porque logra una separación muy clara entre la lógica y el estilo.Comience creando un archivo de etiqueta de plantilla (por ejemplo
appname/templatetags/hello_world.py
):Ahora puede usar la
get_addressee
etiqueta de plantilla en sus plantillas:fuente
Quizás el
default
filtro de plantilla no era una opción en 2009 ...fuente
{% with state=form.state.value|default:other_context_variable %}
en lugar deother_context_variable
que también podemos utilizar cualquier'string_value'
asíEsta no es una buena idea en general. Haga toda la lógica en python y pase los datos a la plantilla para su visualización. La plantilla debe ser lo más simple posible para garantizar que quienes trabajan en el diseño puedan centrarse en el diseño en lugar de preocuparse por la lógica.
Para dar un ejemplo, si necesita información derivada dentro de una plantilla, es mejor ingresarla en una variable en el código de Python y luego pasarla a la plantilla.
fuente
Utilice el con la declaración .
No puedo implicar el código en el primer párrafo de esta respuesta . Tal vez el lenguaje de la plantilla ha dejado de ser el formato anterior.
fuente
En su plantilla puede hacer así:
En sus plantillas de etiquetas puede agregar una etiqueta como esta:
fuente