python - supported - which option does django templates accept
Pasando variable urlname a url tag en la plantilla de django (4)
Lo que me gustaría hacer (para un ''widget'' de cambios recientes, no un widget de django en este caso) es pasar un nombre de url a mi plantilla como una variable, luego usarlo así: {% url sitechangeobject.urlname %}
Donde urlname es una cadena que contiene un nombre válido para una url.
es posible? La plantilla se sigue rompiendo diciendo que no puede encontrar sitechangeobject.urlname como un nombre (lo cual es correcto, no existe). ¿Hay alguna manera de hacer que se vea dentro de esa variable?
Hay otras maneras de resolver este problema si no, solo pensé que lo comprobaría.
¡Gracias!
A partir de Django 1.3, la etiqueta {% url %}
admite correctamente:
{% url view_name_variable %}
{% url ''view_name_string'' %}
... esto se convierte en el comportamiento predeterminado en Django 1.5.
Anteriormente, solo tenías la opción de hacer esto:
{% url view_name_string %}
Para que la etiqueta funcione de esta manera en los proyectos Django 1.3 y 1.4, necesitará la siguiente línea en la parte superior de cada plantilla en la que la use:
{% load url from future %}
Según las notas de lanzamiento de Django 1.3 :
... en Django 1.5, el comportamiento anterior será reemplazado por el comportamiento nuevo. Para garantizar la compatibilidad con futuras versiones de Django, las plantillas existentes deben modificarse para usar las nuevas bibliotecas y la sintaxis futuras.
Tenga en cuenta que el soporte para {% load url from future %}
se ha eliminado en Django 1.9.
Si está utilizando Django 1.5 y versiones posteriores, django-reversetags ya no es necesario para pasar nombres de vista como variables a plantillas, para usar dentro de la etiqueta url.
Estaba confundido con la disponibilidad de django-reversetags, solo pensé en actualizar el asunto correctamente aquí.
para django 1.5 puede ser esto es útil
normalmente, para acceder a una variable pasada desde la vista usamos {{variable}}
sin embargo, para url en la plantilla, lo siguiente no funciona: {% url ''app: namespace'' {{varible}}%}
simplemente usar lo siguiente está bien: {% url ''app: namespace'' varible%}
Nota: esta respuesta solo es realmente relevante para las versiones de django anteriores a la 1.3. Si está utilizando django 1.3 o posterior, la funcionalidad requerida está incorporada; consulte la respuesta de meshy .
La etiqueta url
incorporada no puede hacer esto. Sin embargo, django-reversetag hace exactamente esto (y más).
Según el archivo Léame, la etiqueta reverse
proporcionada por este código proporciona:
- Sintaxis consistente ("literales de cadena" y variables)
- Posibilidad de invertir los nombres de vista almacenados en variables de contexto
- Reversión parcial