Я изучаю документацию Django, но мне нужно включить часть, которую я не могу понять, какую проблему она разрешает, и документация мне не понятна. Любой, кто знает, не могли бы вы предоставить мне реальный пример того, как использовать пространство имен в реальной проблеме. Я знаю синтаксис, но я не знаю цели этого. Я не мог понять. СпасибоНастоящий пример пространства имен URL-адресов
ответ
Как правило, они используются для размещения URL-адресов каждого приложения в их собственном пространстве имен. Это предотвращает функцию Django reverse()
и функцию шаблона {% url %}
от возврата неправильного URL-адреса, поскольку имя URL-шаблона совпало в другом приложении.
Что я имею в моем уровне проекта urls.py
файл состоит в следующем:
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)),
)
Обратите внимание на последний раздел: это идет через приложение я установил (settings.LOCAL_APPS
это настройка Я добавил, что содержит только мои приложения , он добавляется к INSTALLED_APPS
, который имеет другие вещи, такие как Юг), ищет в каждом из них urls.py
и импортирует эти URL-адреса в пространство имен, названное в честь приложения, а также помещает эти URL-адреса в подкаталог URL, названный в честь приложения.
Так, например, если у меня есть приложение под названием hosts
и hosts/urls.py
выглядит следующим образом:
from django.conf.urls.defaults import *
urlpatterns = patterns('hosts.views',
url(r'^$', 'show_hosts', name='list'),
)
Теперь мой views.py
можно назвать reverse("hosts:list")
, чтобы получить URL на страницу, которая вызывает hosts.views.show_hosts
, и это будет выглядеть что-то вроде "/hosts/"
. То же самое для {% url "hosts:list" %}
в шаблоне. Таким образом, мне не нужно беспокоиться о том, чтобы столкнуться с URL-адресом с именем «список» в другом приложении, и мне не нужно приписывать каждое имя hosts_
.
Обратите внимание, что страница входа находится в {% url "login" %}
, поскольку ей не было предоставлено пространство имен.
Рассмотрим вы используете шаблон URL-адрес, как показано ниже
url(r'^login/',include('app_name', name='login'))
Также Рассмотрим вы используете приложение стороннего как Django-RestFramework. Когда вы используете приложение, вы должны объявить следующую строку в файле confs проекта URL.
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
Теперь, если вы проверяете код покоя рамки, вы найдете ниже код в файле urls.py
urlpatterns = [
url(r'^login/$', login, login_kwargs, name='login'),
url(r'^logout/$', logout, name='logout'),
]
Мы использовали «войти в» имя для шаблона URL в нашем проект и одно и то же имя используется в Django-rest-framework для одного из их шаблонов URL. Когда вы используете reverse («login»), Django запутается.
Для решения этих проблем мы используем пространство имен.
@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'
URL-адреса пространства имен никогда не будут сталкиваться с другими пространствами имен.
пространства имён шаблон URL может быть изменено с помощью reverse('namespace:url_name')
- 1. Настоящий пример Ember.js
- 2. JQuery начинающего пространства имен событий Пример
- 3. Пространства имен, чтобы избежать конфликтов - пример?
- 4. Настоящий пример событий в Yii2
- 5. Настоящий пример мира обеденных философов?
- 6. Пространства имен и пространства подпространств
- 7. MVC Организация пространства имен
- 8. Избегайте анемичной модели домена - настоящий пример
- 9. Настоящий пример одной страницы на ASP.Net MVC
- 10. Настоящий пример использования #define в C#?
- 11. Определение переменной-члена пространства имен за пределами пространства имен
- 12. Элементы пространства имен C++
- 13. Пространства имен в C#
- 14. Пространства имен OpemXML
- 15. Избегайте конфликтов имен пространства
- 16. XML пространства имен
- 17. Сокращение вложенных имен пространства имен
- 18. Именование имен и пространства имен
- 19. PHP - Пространства имен - Импорт
- 20. ExtJS5 Смещение пространства имен
- 21. Путаница пространства имен Python
- 22. Понимание документации пространства имен
- 23. Конфигурирование пространства имен XML
- 24. Пример теневого пространства
- 25. Как получить значения из смешанного пространства имен и пространства имен без пространства имен с помощью
- 26. StAX и пространства имен
- 27. Включение сетевого пространства имен из внутреннего пространства имен пользователя
- 28. Исключение неподдерживаемого связывания пространства имен для пространства имен конкретного поставщика
- 29. видимость вне пространства имен размножают использования других элементов пространства имен
- 30. C++ Ошибка пространства имен: не является членом пространства имен
я вижу .. но это то же самое, как если поместить имя в URL, не так ли? Проделайте ту же работу .. –
Теперь я увидел полный ответ ... и это потрясающе ...Если я правильно понял, вы используете пространство имен вместе с именованным URL-адресом .. так что вы не будете беспокоиться о том, что вы назвали два вида из разных приложений с тем же именем ... это правильно? –
В значительной степени. Я уверен, что есть и другие применения, и лучшие, но это был быстрый пример. –