Django 5 для начинающих

Прогресс по курсу:  9/1004

2.4 Диспетчер URL, часть 1.
4 из 14 шагов пройдено
0 из 42 баллов  получено

Основные элементы синтаксиса регулярных выражений

Некоторые базовые элементы регулярных выражений, которые можно использовать для определения адресов URL:

  • ^ начало адреса

  • $ конец адреса

  • + 1 и более символов

  • ? 0 или 1 символ

  • {n} n символов

  • {n, m} от n до m символов

  • . любой символ

  • \d+ одна или несколько цифр

  • \D+ одна или несколько НЕ цифр

  • \w+ один или несколько буквенных или цифровых символов а так-же символ нижнего подчёркивания _

Рассмотрим несколько возможных сопоставлений шаблонов адресов и запросов:

Адрес

Запрос

r'^$'

http://127.0.0.1/ (корень сайта)

r'^about/'

http://127.0.0.1/about/ или http://127.0.0.1/about/contact

r'^about/contact/$'

http://127.0.0.1/about/contact/

r'^products/\d+/$'

http://127.0.0.1/products/23785/

Но не соответствует запросу http://127.0.0.1/products/phones/

r'^products/\D+/$'

http://127.0.0.1/products/phones/

Не соответствует запросу http://127.0.0.1/products/35578/

r'^products/\w+/$'

http://127.0.0.1/products/phones/ или http://127.0.0.1/products/24759/

Не соответствует запросу http://127.0.0.1/products/phones-24759/

r'^products/[-\w]+/$'

http://127.0.0.1/products/phones-24759/

r'^products/[A-Z]{2}/$'

http://127.0.0.1/products/RU/

Не соответствует запросам http://127.0.0.1/products/Ru/ или http://127.0.0.1/products/RUS/

Передача значений в функцию

Нами были рассмотрены все параметры функций path и re_path, кроме одного - kwargs, который позволяет передать в функцию-представление некоторые значения. Например, если мы в файле views.py перепишем функцию about на следующую:

from django.http import HttpResponse


def index(request):
    return HttpResponse('<h2>Главная</h2>')


def about(request, name, age):
    return HttpResponse(f'''
        <h2>О пользователе</h2>
        <p>Имя: {name}</p>
        <p>Возраст: {age}</p>
    ''')


def contact(request):
    return HttpResponse('<h2>Контакты</h2>')

Здесь функция about() также принимает два дополнительных параметра: name и age (имя и возраст пользователя). В функции их значения отправляются пользователю вместе с остальным содержимым.

То в файл urls.py мы можем написать следующее:

from django.urls import path, re_path
from blog import views

urlpatterns = [
    path('', views.index),
    path('about/', views.about, kwargs={"name": "Tom", "age": 38}),
    re_path(r'^contact/', views.contact),
]

С помощью параметра kwargs в функцию about передается словарь с двумя значениями - для двух параметров функции. Соответственно при обращении к этой функции мы увидим в браузере соответствующие данные:

Сейчас данные подставляются через словарь, в следующем шаге мы научимся получать эти данные из пути URL адреса.


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

Мы тут в словарь вводили 'name' и 'age', а на странице выведено на русском, это из-за того что выставлена русская локализация в настройках?

И в таком случае джанго абсолютно все ключи переводит на русский которые может перевести? 

@Георгий_Тимофеев, Это потому что в шаблоне выводится вот так:

        <p>Имя: {name}</p>
        <p>Возраст: {age}</p>

Мы имена ключей не выводим, мы выводим их значения.

Изменен Илья Перминов

@Илья_Перминов, точно, натупил..
спасибо