2012-05-10 20 views
5

na przykład:Jak uzyskać ścieżkę adres URL funkcji widoku w Django

view.py

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

urls.py

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

Niektóre gdzie mam dostać url ścieżka widzenia1 Jak mogę to zrobić? Oczywiście nie chcę sztywnego kodowania ścieżki adresu URL "xxx/view1".

Odpowiedz

15

Potrzebujesz reverse.

reverse('app1.view.view1') 

Jeśli chcesz dowiedzieć się, URL i przekierowanie do niej skorzystać redirect

redirect('app1.view.view1') 

Jeśli chcesz iść dalej i nie hardcode Państwa zdanie imiona albo można name your URL patterns i zamiast używać tych nazw .

1

Możesz użyć do tego funkcji reverse. Można określić obszary nazw i nazwy odpowiednio dla adresów URL i adresów URL, aby ułatwić refaktoryzację.

8

To zależy od tego, czy chcesz je zdobyć, jeśli chcesz uzyskać adres URL w widoku (kod Pythona), można użyć funkcji reverse (documentation):

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

A jeśli chcesz go używać w szablonie następnie można użyć url tag (documentation):

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

Jeśli chcesz url view1 do view1 najlepszy jest request.get_path()

3

Tak jak powiedzieli inni, do tego celu można (należy) użyć funkcji Templatetag() i url.

polecam dodać nazwę do adresu URL wzorzec

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

i odwrócić to dzięki tej nazwie

reverse('view1') 

To sprawi, że kod łatwiejsze byłaby

2

Tak oczywiście można uzyskać ścieżkę dostępu do adresu URL o nazwie "view1" bez zakodowania adresu URL.

Wszystko, co musisz zrobić, to - po prostu zaimportować funkcję "wstecz" z urlresolvers Django.

Wystarczy spojrzeć na poniższy przykład kodu:

from django.core.urlresolvers import reverse 

from django.http import HttpResponseRedirect 

def some_redirect_fun(request): 

    return HttpResponseRedirect(reverse('view-name')) 
Powiązane problemy