2008-09-06 26 views
7

Czy mogę wydrukować adres URL /admin/manage/products/add określonego widoku w szablonie?Django: Wydrukuj URL zdjęcia bez kodowania na sztywno adresu URL Url

Oto reguła chcę, aby utworzyć łącze do

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

chciałbym mieć/zarządzać/produkty/dodać w szablonie bez hardcoding go. Jak mogę to zrobić?

Edit: nie używam domyślnego administratora (dobrze, jestem, ale to co innego URL), to moja własna

Odpowiedz

15

Można użyć get_absolute_url, ale będzie to działać tylko dla określonego obiektu. Ponieważ Twój obiekt nie został jeszcze utworzony, nie zadziała w tym przypadku.

Chcesz użyć named URL patterns. Oto krótki wstęp:

dokonać korekty w urls.py do:

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

Następnie w szablonie użyć do wyświetlania URL:

{% url create-product %} 

Jeśli jesteś przy użyciu Django 1.5 lub nowszego potrzebujesz:

{% url 'create-product' %} 

Możesz zrobić kilka potężniejszych rzeczy o nazwanych wzorcach adresów URL, jesteś bardzo przydatny. Zauważ, że są one tylko w wersji rozwojowej (a także 1.0).

+0

Jak mogę wywołać adres URL w moim widoku? Np. Return HttpResponseRedirect (...) where ... jest wartością url create-product – g33kz0r

+1

@ Noo see http://stackoverflow.com/questions/1208802 –

+0

Nie zapomnij dodać 'name =' w ' urls.py', tak jak poniżej: '(r '^ view/$', 'view.function', name = 'hiya')' – smilebomb

0

Preferowanym sposobem tworzenia adresu URL jest dodanie do klas modelu metody get_absolute_url. Możesz tam zakodować ścieżkę, abyś przynajmniej zbliżył się do filozofii KISS.

Możesz pójść dalej, korzystając z dekoratora permalink, który przedstawia ścieżkę na podstawie konfiguracji adresów URL.

Możesz przeczytać więcej w dokumentacji django here.