Studiuję dokumentację Django, ale muszę w części, że nie mogę zrozumieć, jaki rodzaj problemu rozwiązuje, a dokumentacja nie jest dla mnie jasne. Każdy, kto wie, czy mógłbyś podać mi prawdziwy przykład wykorzystania przestrzeni nazw w prawdziwym problemie. Znam składnię, ale nie znam celu tego ... Nie mogłem zrozumieć. DziękiPrawdziwy przykład adresu URL Przestrzeń nazw
Odpowiedz
Zazwyczaj są one używane do umieszczania adresów URL poszczególnych aplikacji w ich własnych obszarach nazw. Zapobiega to funkcji zwracania nieprawidłowego adresu URL przez funkcję szablonu Django i funkcji szablonu , ponieważ nazwa wzorca adresu URL pasuje do innej aplikacji.
Co mam w moim projekcie poziomu urls.py
plik jest następujący:
from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', 'main.views.main', name='main'),
url(r'^login$', 'django.contrib.auth.views.login', name="login"),
url(r'^logout$', 'django.contrib.auth.views.logout',
{"next_page": "/"}, name="logout"),
# Admin
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
)
# Auto-add the applications.
for app in settings.LOCAL_APPS:
urlpatterns += patterns('',
url(r'^{0}/'.format(app), include(app + '.urls', namespace=app)),
)
Uwaga ostatni odcinek: to przechodzi wniosków Mam zainstalowany (settings.LOCAL_APPS
jest ustawienie I dodał, że zawiera wyłącznie moje aplikacje , zostanie dodany do INSTALLED_APPS
, który ma inne rzeczy, takie jak Południe), szuka w każdym z nich urls.py
i importuje te URL-e do przestrzeni nazw nazwanej po aplikacji, a także umieszcza te adresy URL w podkatalogu URL nazwanym po aplikacji.
Tak więc, na przykład, jeśli mam aplikację o nazwie hosts
i hosts/urls.py
wygląda następująco:
from django.conf.urls.defaults import *
urlpatterns = patterns('hosts.views',
url(r'^$', 'show_hosts', name='list'),
)
teraz mój views.py
mogą dzwonić reverse("hosts:list")
aby uzyskać adres URL do strony, która nazywa hosts.views.show_hosts
i będzie wyglądać coś jak "/hosts/"
. To samo dotyczy {% url "hosts:list" %}
w szablonie. W ten sposób nie muszę się martwić o kolizję z adresem URL o nazwie "list" w innej aplikacji i nie muszę poprzedzać każdej nazwy prefiksem hosts_
.
Należy zauważyć, że strona logowania ma numer {% url "login" %}
, ponieważ nie podano jej przestrzeni nazw.
Rozważmy używasz wzorca url jak poniżej
url(r'^login/',include('app_name', name='login'))
także rozważyć używasz aplikacji innych firm, takich jak Django RestFramework. Podczas korzystania z aplikacji, musisz zadeklarować następujący wiersz w pliku URL conf projektu.
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
Teraz sprawdzając kod Rest-ram, znajdziesz poniższy kod w pliku urls.py
urlpatterns = [
url(r'^login/$', login, login_kwargs, name='login'),
url(r'^logout/$', logout, name='logout'),
]
Użyliśmy „login” nazwę wzorca adresu URL w naszym projekt i ta sama nazwa jest używana przez Django-rest-framework dla jednego ze wzorców adresów URL. Gdy użyjesz reverse ("login"), Django się pomyli.
Aby rozwiązać tego typu problemy, używamy przestrzeni nazw.
@register.simple_tag
def optional_docs_login(request):
"""
Include a login snippet if REST framework's login view is in the URLconf.
"""
try:
login_url = reverse('rest_framework:login')
except NoReverseMatch:
return 'log in'
Nazwy adresów URL przestrzeni nazw nigdy nie będą kolidować z innymi obszarami nazw.
przestrzeni nazw wzorzec URL można odwrócić za pomocą reverse('namespace:url_name')
- 1. Nazw i maksymalnych długości części adresu URL
- 2. JAXB @XmlAttribute @XmlValue prawdziwy przykład
- 3. Zagnieżdżona anonimowa przestrzeń nazw?
- 4. „szablonów” przestrzeń nazw
- 5. Przestrzeń nazw rakiety/bazy
- 6. Przestrzeń nazw JavaScript z jQuery
- 7. Przestrzeń nazw XML domyślnie/dziedziczenie
- 8. Jak określić przestrzeń nazw funkcji?
- 9. C# odniesione nazw ukryte Klasa Przestrzeń nazw
- 10. Unikanie anemicznego modelu domeny - prawdziwy przykład
- 11. Przestrzeń nazw xmlns łamiąc lxml
- 12. Przestrzeń nazw Android Custom Control
- 13. Pobierz kolekcję nazw parametrów z adresu URL Java/Android
- 14. Obsługa adresu URL RESTful URL
- 15. Przestrzeń nazw Xml i C# csproj
- 16. nrepl.el i leiningen 2 domyślna przestrzeń nazw?
- 17. Groovy XML i przestrzeń nazw "xml:"
- 18. Kodowanie adresu URL MVC3?
- 19. Przestrzeń nazw "<globalna przestrzeń nazw>" zawiera już definicję "Przepływu pracy"
- 20. Wywołanie adresu URL rakiety
- 21. Przestrzeń nazw PHP - rozwiązanie obejmujące wszystkie klasy w przestrzeni nazw
- 22. Uzyskaj przestrzeń nazw z pliku xml C#
- 23. Jak zadeklarować przestrzeń nazw w WPF XAML?
- 24. Przestrzeń nazw C++ i zmienne statyczne
- 25. Co to jest przestrzeń nazw "Standard"?
- 26. Jak utworzyć przestrzeń nazw w skrypcie PowerShell?
- 27. Resharper: Przestrzeń nazw nie odpowiada lokalizacji pliku
- 28. Jaxb ignoruje przestrzeń nazw w unmarshalling
- 29. Co to jest przestrzeń nazw w aerospike
- 30. Przestrzeń nazw "std" nie ma członka "sort"
widzę .. ale to jest taka sama, jak umieszczenie nazwy w adresie URL, prawda? Wykonaj tę samą pracę .. –
Teraz zobaczyłem pełną odpowiedź ... i jest niesamowita ...Jeśli mam to prawo, używasz przestrzeni nazw wraz z nazwanym adresem URL, abyś nie martwił się, gdybyś nazwał dwa widoki z różnych aplikacji o tej samej nazwie ... czy to prawda? –
Dość dużo. Jestem pewien, że są inne zastosowania i lepsze, ale to był szybki przykład. –