Настройка путей Django

Концепция urls
Чтобы разработать URL-адреса для приложения, необходимо создать файл urls.py. Этот файл представляет собой код Python, который описывает зависимости между выражениями URL-пути и функциями отображениями views.

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

Django просматривает каждый шаблон URL по порядку и останавливается на первом, который соответствует запрошенному URL. Поэтому важно соблюдать порядок записи путей в файле.
Пример конфигурации urls

from django.urls import path

from . import views


app_name = 'posts'

urlpatterns = [path('', views.index, name='index'),
               path('group/<slug:slug>/', views.group_posts, name='group_list'),
               path('create/', views.post_create, name='post_create'),
               path('posts/<int:post_id>/', views.post_detail, name='post_detail'),
               path('profile/<str:username>/', views.profile, name='profile'),
               path('posts/<int:post_id>/edit/', views.post_edit, name='post_edit'),
               path('posts/<int:post_id>/comment/', views.add_comment, name='add_comment'),
               path('follow/', views.follow_index, name='follow_index'),
               path('profile/<str:username>/follow/', views.profile_follow, name='profile_follow'),
               path('<str:username>/unfollow/', views.profile_unfollow, name="profile_unfollow"),
               ]

описание кода
  • Чтобы получить значение из URL-адреса, используйте угловые скобки <>.
  • Захваченные значения могут включать тип преобразователя. Например, используйте <int:name>для захвата целочисленного параметра.
  • В начале косая черта / не пишется
  • Заносится отображение views для данного адреса
  • Указывается пространство имен (app_name = 'posts'), если адреса принадлежат отдельному приложению
  • Используется name, для удобства обратной совместимости адресов в шаблонах html
Преобразователи пути
По умолчанию доступны следующие преобразователи пути:

str- Соответствует любой непустой строке, кроме разделителя пути, '/'. Это значение по умолчанию, если не указан преобразователь

int- Соответствует нулю или любому положительному целому числу. Возвращает int.

slug- Соответствует любой строке slug, состоящей из букв или цифр ASCII, а также символов дефиса и подчеркивания.

uuid- Соответствует отформатированному UUID. Подробнее UUIDэкземпляр.

path- Соответствует любой непустой строке, включая разделитель пути, '/'. Это позволяет вам сопоставлять полный путь URL.

Для более сложных требований соответствия вы можете определить свои собственные преобразователи пути.

Если синтаксиса путей и конвертеров недостаточно для определения шаблонов URL-адресов, вы также можете использовать регулярные выражения. Для этого используйте re_path()
подключение адресов приложения
При разделении сайта на несколько приложений, удобно указывать адреса внутри структуры приложения. Для этого в нем создается файл urls.py. В главном файле необходимо указать ссылку на подключаемые адреса, используется команда include().

Ниже указано подключение адресов из приложений contact и aggregator
Пример кода

from django.urls import include, path

urlpatterns = [
    # ... snip ...
    path('community/', include('aggregator.urls')),
    path('contact/', include('contact.urls')),
    # ... snip ...
]
Обратная совместимость
URL-адресов
Django имеет возможность получать URL-адреса в их окончательной форме для встраивания в контент сайта или отображений (views). Также применяется при обработки потока навигации на сервере.
При получении URL-адреса учитывается:

- идентификация отображения, отвечающего за его обработку (views).
-указанные типы (int, slug, и т. д.)
- значения аргументов представления.

Django предоставляет инструменты для реверсирования URL-адресов:

  • В шаблонах: Использование url тега template.
  • В коде Python: использование reverse() функции.
  • В коде более высокого уровня, связанном с обработкой URL-адресов: метод get_absolute_url().
Пример использования в шаблоне

# path('create/', views.post_create, name='post_create') использование имени 
<li> 
    <a href=" {% url 'posts:post_create' %}">Ссылка</a>
</li>
Пример использования reverse() при написании тестов

# Создания словаря для проверки сформированных путей
templates_url_names = { 
            reverse('posts:index'): 'posts/index.html',  
            reverse('posts:post_create'): 'posts/create_post.html',
}
Пример использования get_absolute_url()

  from django.urls import reverse

def get_absolute_url(self):
    return reverse('people-detail', kwargs={'pk' : self.pk})
ОПИСАНИЕ АТРИБУТОВ
MicroPython — это компактная и эффективная реализация языка программирования Python 3 , включающая небольшое подмножество стандартной библиотеки Python и оптимизированная для работы на микроконтроллерах и в ограниченных средах. Документация