Основные элементы синтаксиса регулярных выражений
Некоторые базовые элементы регулярных выражений, которые можно использовать для определения адресов URL:
-
^начало адреса -
$конец адреса -
+1 и более символов -
?0 или 1 символ -
{n}n символов -
{n, m}от n до m символов -
.любой символ -
\d+одна или несколько цифр -
\D+одна или несколько НЕ цифр -
\w+один или несколько буквенных или цифровых символов а так-же символ нижнего подчёркивания_
Рассмотрим несколько возможных сопоставлений шаблонов адресов и запросов:
|
Адрес |
Запрос |
|
|
http://127.0.0.1/ (корень сайта) |
|
|
http://127.0.0.1/about/ или http://127.0.0.1/about/contact |
|
|
http://127.0.0.1/about/contact/ |
|
|
http://127.0.0.1/products/23785/ Но не соответствует запросу http://127.0.0.1/products/phones/ |
|
|
http://127.0.0.1/products/phones/ Не соответствует запросу http://127.0.0.1/products/35578/ |
|
|
http://127.0.0.1/products/phones/ или http://127.0.0.1/products/24759/ Не соответствует запросу http://127.0.0.1/products/phones-24759/ |
|
|
http://127.0.0.1/products/phones-24759/ |
|
|
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 адреса.