2010-01-24 17 views
29

Szukam dobrego samouczka dla przestrzeni nazw URL w Django. Uważam, że oficjalna dokumentacja jest zbyt skromna - brakuje jej dobrych przykładów. Znalazłem similar question tutaj na stosie, ale odpowiedzi nie pomogły mi w pełni zrozumieć temat.Ktoś zna dobry samouczek Django URL namespaces?

+0

Czy sprawdziłeś adres URL narzędzia do sprawdzania adresów URL w https://docs.djangoproject.com/en/1.3/topics/http/urls/#naming-url-patterns Zapraszam do przeczytania całej sekcji, ponieważ jeśli rozumiesz Podstawy tego, jak to działa, wtedy łatwiej byłoby zrozumieć, – FallenAngel

+5

@FallenAngel: mój punkt wciąż pozostaje - w oficjalnej dokumentacji nie ma dobrych przykładów użycia przestrzeni nazw. – minder

Odpowiedz

33

Uzgodnione, dokumenty do tego są dość mylące. Oto moje odczytanie go (NB: cały kod jest niesprawdzone!):

W apps.help.urls:

urlpatterns = [ 
    url(r'^$', 'apps.help.views.index', name='index'), 
    ] 

W głównej urls.py:

urlpatterns = [ 
    url(r'^help/', include('apps.help.urls', namespace='help', app_name='help')), 
    url(r'^ineedhelp/', include('apps.help.urls', namespace='otherhelp', app_name='help')), 
    ] 

W szablonie:

{% url help:index %} 

powinien wytworzyć adres URL /help/.

{% url otherhelp:index %} 

powinien wygenerować adres URL /ineedhelp/.

{% with current_app as 'otherhelp' %} 
    {% url help:index %} 
{% endwith %} 

powinien również produkować URL /ineedhelp/.

Podobnie, reverse('help:index') powinien produkować /help/.

reverse('otherhelp:index') powinien produkować /ineedhelp/.

reverse('help:index', current_app='otherhelp') powinny również produkować /ineedhelp/.

Tak jak powiedziałem, jest to oparte na moim czytaniu dokumentów i mojej obecnej znajomości tego, jak rzeczy działają w Django. Nie poświęciłem czasu na sprawdzenie tego.

+0

Dlaczego potrzebujemy ustawić app_name i namespace? Właśnie się zastanawiałem. Wydaje się, że działa również, gdy nie ustawiono nazwy aplikacji –

+0

Ponieważ dokumenty [doprowadziły mnie do przekonania, że ​​były konieczne] (https://docs.djangoproject.com/en/1.4/topics/http/urls/#defining-url-namespaces). Nawet jeśli dokumenty są błędne lub wprowadzają w błąd, prawdopodobnie jest bardziej odporne na przyszłe działanie funkcji "nazwa_aplikacji", zgodnie z dokumentacją, na wypadek, gdyby zachowanie w przyszłości zmieniło się tak, aby pasowało do dokumentów. Jeśli naprawdę chcesz wiedzieć dlaczego, musisz przeczytać kod. –

+0

Dobra sugestia Normalnie staram się czytać jak najwięcej źródeł, ale nie mogłem bezpośrednio znaleźć powiązanej części, zrobię jeszcze więcej kopania. Przeczytaj przed dobrym artykułem, który powiedział: Źródło nigdy nie kłamie, ale instrukcja może zrobić. Po prostu kazał ludziom przeczytać źródło, jeśli napotkał problem lub użył api niewłaściwego hehe. –

0

To z docs

(r'^help/', include('apps.help.urls', namespace='foo', app_name='bar')), 

Może powinieneś być bardziej szczegółowe na temat tego, co staramy się robić.

Powiązane problemy