2012-05-10 52 views
5

por ejemplo:Cómo obtener la ruta URL de una función de vista de Django

view.py

def view1(request): 
    return HttpResponse("just a test...") 

urls.py

urlpatterns = patterns('', 
    url(r'^view1$', 'app1.view.view1'), 
) 

algunos donde tengo que conseguir la url ruta de vista1 ¿Cómo puedo hacerlo? Por supuesto, no quiero codificar de manera forzada la ruta de la url "xxx/view1".

Respuesta

15

Necesita reverse.

reverse('app1.view.view1') 

Si desea averiguar URL y redirigir a la misma, utilizar redirect

redirect('app1.view.view1') 

Si quiere ir más allá y no a codificar sus nombres de vista, ya sea, puede name your URL patterns y utilizar estos nombres en lugar .

1

Puede usar la función reverse para esto. Puede especificar espacios de nombres y nombres para url-includes y urls, respectivamente, para facilitar la refactorización.

8

Esto depende de si usted quiere conseguirlo, si desea obtener la URL en una vista (código Python), puede utilizar la función reverse (documentation):

reverse('admin:app_list', kwargs={'app_label': 'auth'}) 

Y si lo quieren usar en una plantilla, puede utilizar la etiqueta url (documentation):

{% url 'path.to.some_view' v1 v2 %} 
2

Si desea que la url de la Vista1 en el Vista1 es la mejor request.get_path()

3

Como dijeron otros, la función reverse y las etiquetas de plantilla url pueden (deberían) usarse para esto.

recomendaría para agregar un nombre a su patrón de URL

urlpatterns = patterns('', 
    url(r'^view1$', 'app1.view.view1', name='view1'), 
) 

y darle la vuelta gracias a este nombre

reverse('view1') 

Eso haría que su código sea más fácil de refactorizar

2

Sí , por supuesto, puede obtener la ruta de vista url llamada 'view1' sin codificar la url.

Todo lo que necesita hacer es importar la función 'revertir' de Django urlresolvers.

Basta con mirar el código de ejemplo a continuación:

from django.core.urlresolvers import reverse 

from django.http import HttpResponseRedirect 

def some_redirect_fun(request): 

    return HttpResponseRedirect(reverse('view-name')) 
Cuestiones relacionadas