Конвертер int

Конвертер int применяется в маршрутах Django для захвата целочисленных значений из URL и преобразования их в Python-объекты типа int. Он используется в функции path для определения динамических сегментов URL, которые должны быть целыми числами. Конвертер автоматически проверяет, что переданное значение является целым числом, и передает его в представление как аргумент типа int.

Синтаксис

pythonfrom django.urls import path
from myapp.views import my_view

urlpatterns = [
    path('articles/<int:article_id>/', my_view, name='article_detail'),
]

Пример

Давайте создадим представление, которое принимает целочисленный идентификатор статьи из URL:

pythonfrom django.http import HttpResponse
from myapp.models import Article

def article_detail(request, article_id):
    try:
        article = Article.objects.get(id=article_id)
        return HttpResponse(f"Article title: {article.title}")
    except Article.DoesNotExist:
        return HttpResponse("Article not found", status=404)

Результат выполнения кода при обращении к URL '/articles/42/':

python"Article title: Django Basics"

Пример

Рассмотрим использование конвертера int с несколькими параметрами в одном URL:

pythonfrom django.urls import path
from myapp.views import article_range

urlpatterns = [
    path('articles/<int:start_id>/to/<int:end_id>/', article_range, name='article_range'),
]

Создадим представление, которое обрабатывает оба целочисленных параметра:

pythonfrom django.http import HttpResponse
from myapp.models import Article

def article_range(request, start_id, end_id):
    articles = Article.objects.filter(id__gte=start_id, id__lte=end_id)
    titles = [article.title for article in articles]
    return HttpResponse(f"Articles: {', '.join(titles)}")

Результат выполнения кода при обращении к URL '/articles/1/to/5/':

python"Articles: Django Basics, Advanced Django, Django REST, Django Forms, Django Testing"

Пример

Используем конвертер int с параметрами в виде строки запроса:

pythonfrom django.urls import path
from myapp.views import user_posts

urlpatterns = [
    path('user/<int:user_id>/posts/', user_posts, name='user_posts'),
]

Создадим представление, которое использует идентификатор пользователя для получения постов:

pythonfrom django.http import HttpResponse
from myapp.models import Post, User

def user_posts(request, user_id):
    try:
        user = User.objects.get(id=user_id)
        posts = Post.objects.filter(author=user)
        post_titles = [post.title for post in posts]
        return HttpResponse(f"Posts by {user.username}: {', '.join(post_titles)}")
    except User.DoesNotExist:
        return HttpResponse("User not found", status=404)

Результат выполнения кода при обращении к URL '/user/3/posts/':

python"Posts by john_doe: My First Post, Python Tips, Django ORM Guide"

Смотрите также

  • конвертер str,
    который преобразует строковые параметры из URL
  • конвертер slug,
    который преобразует слаг-параметры из URL
  • конвертер uuid,
    который преобразует UUID-параметры из URL
  • функция path,
    которая определяет маршруты в Django