Освойте искусство маршрутизации с помощью встроенной в Django поддержки динамических URL
Без динамической маршрутизации навигация по веб-страницам была бы затруднена. Вам пришлось бы набирать в браузере полный путь к каждой посещаемой странице. Ужасный пользовательский опыт
Динамические унифицированные указатели ресурсов (URL) позволяют переходить на различные страницы приложения одним нажатием кнопки.Django позволяет легко разрабатывать динамические URL. В нем есть модуль конфигурации URL (URLconf), который связывает выражения URL с представлениями
Весь код в URLconf написан на синтаксисе Python, что упрощает создание динамических URL. Давайте узнаем больше о динамических URL, создав проект Django
1. Создайте проект Django
Сначала создайте проект Django и приложение (app)
Назовите свое приложение Boma-watch. Приложение будет собирать информацию о местоположении, описании и номерах жителей различных районов. Создайте модель с именем NeighborHood. Используйте модель для добавления информации о районах в базу данных. Узнайте, как создавать модели в Django и базу данных, если вы не знакомы
Далее создайте функцию представления для районов
2. Создайте функцию представления
В Django представления – это функции Python, которые принимают HTTP-запросы и возвращают ответы. На веб-странице, созданной с помощью Django, представления выполняют различные задачи и миссии
Чтобы выполнить представление, вы должны вызвать его через URL.URL – это уникальный путь к ресурсу в Интернете. Ресурс может быть HTML-страницей, изображением или конечной точкой API
Создайте URL-адрес, который извлекает данные о соседе на основе переданных параметров. Для этого вы можете использовать первичный ключ (pk) или идентификатор (id) для получения информации. Для этого вы будете использовать один шаблон
Вы можете создавать представления, определяя их в файле views.py в папке приложения. Начните с импорта функции render из Django для отображения данных по URL. Также импортируйте модель NeighborHood из models.py
from django.shortcuts import render
from.models import NeighbourHood
Затем создайте функцию представления с именем home, которая отображает все районы на шаблоне home. Функция NeighborHood.objects.all() получает данные для всех районов из базы данных
def home(request):
neighborhoods = NeighbourHood.objects.all()
return render (request, 'home.html', {'neighborhoods':neighborhoods})
Также создайте функцию представления для join_hood, которая будет отображать информацию о районе. Функция NeighbourHood.objects.get(id=id) запрашивает данные в соответствии с идентификатором. Затем информация выводится на шаблон
def join_hood(request, id):
neighborhood = NeighbourHood.objects.get(id=id)
return render (request, 'join_hood.html', {'neighborhood':neighborhood})
Позже, когда вы перейдете к району, вы сможете увидеть информацию о его профиле
3. Создайте динамический URL
Теперь вы можете создать динамический URL для созданной вами функции представления
from django.urls import path
from. import views
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = [
path ('home', views.home, name='home'),
path ('join_hood/<str:id>/', views.join_hood, name='join_hood'),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
Импортируйте path из Django URLs, чтобы создать пути для представления. Затем импортируйте функции представления из views.py
URL join_hood содержит заполнитель в угловых скобках: <str:id>. Это захватывает эту часть URL и отправляет ее в представление
В угловых скобках обычно содержится спецификация конвертера. Спецификация может быть либо строкой (str), либо целым числом (int).Django также предлагает slug, path или универсальные уникальные идентификаторы (uuid). Спецификация ограничивает тип переменной или количество символов, передаваемых в URL представлению
Присвоение URL-адресам имени поможет идентифицировать их в шаблонах
Импорты static и staticfiles отображают статические файлы на пути URL. Узнайте больше о том, как структурировать параметры URL в официальной документации Django
4. Добавление URL в шаблон
После того как вы добавили функцию просмотра в URL, создайте HTML-шаблон для отображения данных. Назовите шаблон join_hood.html
{% extends 'base.html' %}
{% load static %}
{% block content %}
<div class='card mb-3' style='max-width:fit content;'>
<div class='row g-0'>
<div class='col-md-4'>
<div class='col-md-8' >
<div class='card-body'>
<h5 class='card-title'> Welcome!</h5>
<p class='card-text pt-4'> Name: {{neighbourhood.name}}</p>
<p class='card-text pt-4'> Location: {{neighbourhood.location}}</p>
<p class='card-text pt-4'> Description: {{neighbourhood.description}}</p>
<p class='card-text pt-4'> Health Tel:{{neighbourhood.health_tell}}</p>
<p class='card-text pt-4'> Police Number: {{neighbourhood.police_number}}</p>
<p class='card-text pt-4'> Residents : {{neighbourhood.Count}}</p>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
Создайте шаблон join_hood в папке app для отображения данных о районе. Сначала расширьте шаблон base.html таблицами стилей (bootstrap), которые вы будете использовать для стилизации шаблона. Затем выведите переменные, которые будут отображать информацию на странице
Далее создайте шаблон home.html, в котором вы будете отображать все районы
{% extends 'base.html' %}
{% load static %}
{% block content %}
<div class='container' style='color:black;'>
<img src='{{neighborhood.hood_logo.url}}' class='card-img-top' alt='{{user.neighborhood.name}}'>
<div class='row'>
{% for neighborhood in neighborhoods %}
<div class='col-md-4'>
<div class='card mb-4' style='min-height:340px'>
<img src='{{neighborhood.hood_logo.url}}' class='card-img-top' alt='{{user.hood.name}}'>
<div class='card-body'>
<h5 class='card-title'>
{{neighborhood.name}}
({{neighborhood.location}})
<span class='ml-4'>{{neighborhood.Count}} member{{neighborhood.members.count|pluralize}}</span>
</h5>
<p class='card-text'>{{neighborhood.description}}</p>
<p class='card-text'>{{neighborhood.member.Count}}</p>
<a href='{% url 'join_hood' neighborhood.id %}' class='btn btn-primary btn-sm'>Join Hood</a>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
На главной странице отобразите всю информацию о микрорайонах, которую вы хотите вывести на экран. На главной странице вы добавите кнопку и тег якоря. Тег якоря содержит имя URL и ID района
При нажатии кнопка переходит в район с данным идентификатором. Домашний шаблон появляется по адресу URL http://127. 0. 0. 1:8000/home/. На рисунке ниже показана эта страница:
5. Протестируйте динамическую маршрутизацию
Теперь вы можете проверить, работает ли динамическая маршрутизация на шаблоне. Когда вы нажимаете кнопку join hood, происходит переход к шаблону join_hood. В шаблоне join_hood отображается информация о выбранном районе
Вы также увидите ID района, отображаемый в URL браузера http://127. 0. 0. 1:8000/join_hood/2/
Он будет выглядеть так, как показано ниже:
Поздравляем! Вы создали динамический URL
Зачем использовать URL в Django?
Динамические URL являются важной особенностью веб-приложений.Django позволяет легко разрабатывать URL в соответствии с вашими потребностями. Он устраняет ограничения, которые вы могли бы связать с другими фреймворками
Модуль URLconf полон ресурсов, поддерживающих создание URL в Django. Он также облегчает обслуживание статических файлов на шаблонах и улучшает обработку ошибок
В Django есть и другие функции, предназначенные для оптимизации бэкенд-приложений. Среди прочих возможностей он автоматизирует аутентификацию пользователей, администрирование контента и карты сайта
Комментировать