Кто-нибудь знает хороший учебник по пространствам имен URL-адресов Django?

Я ищу хороший учебник по пространствам имен URL в Django. Я нахожу официальную документацию слишком скудной — ей не хватает хороших примеров. Я нашел похожий вопрос здесь, в стеке, но ответы не помогите мне полностью понять тему либо.


person minder    schedule 24.01.2010    source источник
comment
Вы проверили документ диспетчера URL-адресов в https://docs.djangoproject.com/en/1.3/topics/http/urls/#naming-url-patterns Я рекомендую вам прочитать весь раздел, потому что, если вы понимаете основы того, как это работает, вам будет легче понять   -  person FallenAngel    schedule 28.05.2011
comment
@FallenAngel: моя точка зрения остается неизменной - в официальной документации нет хороших примеров использования пространств имен.   -  person minder    schedule 12.06.2011


Ответы (2)


Согласитесь, документы для этого довольно запутаны. Вот мое прочтение (NB: весь код не проверен!):

In apps.help.urls:

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

В вашем основном 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')),
    ]

В вашем шаблоне:

{% url help:index %}

должен создать URL-адрес /help/.

{% url otherhelp:index %}

должен создать URL-адрес /ineedhelp/.

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

также должен создавать URL-адрес /ineedhelp/.

Точно так же reverse('help:index') должно произвести /help/.

reverse('otherhelp:index') должно произвести /ineedhelp/.

reverse('help:index', current_app='otherhelp') также должно производить /ineedhelp/.

Как я уже сказал, это основано на моем чтении документации и моем существующем знакомстве с тем, как все работает в Django-land. Я не нашел времени, чтобы проверить это.

person David Eyk    schedule 09.09.2011
comment
почему нам нужно установить app_name и namespace? Просто интересно. Кажется, это также работает, если не установить app_name - person Sam Stoelinga; 03.10.2012
comment
Хорошее предложение. Я обычно стараюсь читать как можно больше источников, но не могу напрямую найти соответствующую часть, буду копать дальше. Прочтите перед этим хорошую статью, в которой сказано: Источник никогда не врёт, но руководство может лгать. По сути, он говорил людям читать исходный код, если они столкнулись с проблемой или неправильно использовали API, хе-хе. - person Sam Stoelinga; 05.10.2012
comment
Будь осторожен. У меня работает, но без кавычек: {% url help:index %} - person dani herrera; 04.01.2013
comment
ак! Я никогда не могу вспомнить, когда я должен цитировать вещи или нет в тегах шаблона Django. Хороший улов. - person David Eyk; 04.01.2013

Это из документов

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

Возможно, вам следует более конкретно указать, что вы пытаетесь сделать.

person Facundo Casco    schedule 08.07.2011