2008-09-06 18 views
7

¿Puedo imprimir una url /admin/manage/products/add de una cierta vista en una plantilla?Django: Imprimir url de vista sin hardcoding la url

Esta es la regla que quiero crear un vínculo para

(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}), 

me gustaría tener/gestionar/productos/añadir en una plantilla sin codificar ella. ¿Cómo puedo hacer esto?

Editar: no estoy utilizando el administrador por defecto (bueno, soy, pero es en otra URL), esta es mi propia

Respuesta

15

Puede usar get_absolute_url, pero eso solo funcionará para un objeto en particular. Como su objeto no se ha creado aún, no funcionará en este caso.

Quiere usar named URL patterns. He aquí una rápida introducción:

Cambie la línea en su urls.py a:

(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}, "create-product"), 

Luego, en su plantilla que utilice esta opción para mostrar la URL:

{% url create-product %} 

Si eres usando Django 1.5 o superior es necesario lo siguiente:

{% url 'create-product' %} 

usted puede hacer algunas cosas más potentes con patrones de URL con nombre, el eres muy útil. Tenga en cuenta que solo están en la versión de desarrollo (y también 1.0).

+0

¿Cómo puedo llamar a la url desde mi punto de vista? Por ejemplo, devolver HttpResponseRedirect (...) donde ... es el valor de url create-product – g33kz0r

+1

@Noah ver http://stackoverflow.com/questions/1208802 –

+0

No olvide agregar 'name =' en el ' urls.py', así: '(r '^ view/$', 'view.function', name = 'hiya')' – smilebomb

2

Si utiliza named url patterns puede hacer lo siguientes aparatos en su plantilla

{% url create_object %} 
0

La forma preferida de crear la URL es agregando un método get_absolute_url a sus clases modelo. Puedes codificar el camino para que al menos te acerques a seguir la filosofía de KISS.

Puede ir más allá al utilizar el decorador permalink que calcula la ruta en función de la configuración de las URL.

Puede leer más en la documentación de django here.