¿Cómo pasar una variable a la etiqueta {% url%} en django?

Tengo 2 vistas: ayb, todas se procesan en una plantilla T. También hay vistas a_2 y b_2. Y la plantilla T debería generar urls para las vistas a_2 y b_2.

sin embargo, no puedo usar {% url%} porque no puedo pasar el nombre de url como parámetro.

No puedo generar la url completa en las vistas porque debería hacerlo varias veces (una en una fila en una tabla, por lo que podría haber cientos de enlaces)

No quiero escribir 2 exactamente la misma plantilla. Entonces la pregunta es: ¿cómo evitar esto?

Esto se soluciona en django 1.5.

En versiones anteriores a 1.5 necesitas usar

{% extends 'base.html' %} {% load url from future %} {% url 'name_as_a_string' %} {% url name_stored_in_variable %} 

Desde https://docs.djangoproject.com/en/dev/releases/1.5/

Una característica obsoleta que vale la pena mencionar es el cambio a la etiqueta url de “nuevo estilo”. Antes de Django 1.3, la syntax como {% url myview%} se interpretaba incorrectamente (Django consideraba que “myview” era un nombre literal de una vista, no una variable de plantilla llamada myview). Django 1.3 y versiones posteriores introdujeron la {% load url from future%} syntax para introducir el comportamiento corregido donde myview se veía como una variable.

Bueno, en este caso, puede usar la etiqueta {% if %} y agregarle alguna condición (y quizás algunas variables en el contexto) o escribir una etiqueta url personalizada.

 myapp templatetags __init__.py myapp_urls.py 

myapp_urls.py

 from django import template from django.template import Context from django.template.defaulttags import register @register.tag(name="custom_url") def render_map(parser, token): contents, url_name = token.split_contents() return CustomURLNode(url_name) class CustomURLNode(template.Node): def __init__(self, url_name): self.url_name = template.Variable(url_name) def render(self, context): return reverse(url_name.resolve(context)) 

En plantilla:

 {% load myapp_urls %} {% custom_url myvar %} 

Este es un código no probado y puede contener errores, pero escribir tags de plantillas personalizadas debería ser una buena solución.