РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
10 of 818 menu

Поле SlugField

Поле SlugField предназначено для хранения строк, которые могут использоваться в URL-адресах. Слаг (slug) - это часть URL, идентифицирующая конкретную страницу, например, "my-first-article". Поле автоматически преобразует введенные данные в безопасный формат, удаляя пробелы и специальные символы, заменяя их на дефисы. Это поле наследуется от CharField и принимает те же параметры, но с некоторыми особенностями: максимальная длина по умолчанию составляет 50 символов, а также доступны дополнительные параметры для управления форматированием.

Параметры поля

Основные параметры SlugField:

  • max_length - максимальная длина строки (по умолчанию 50);
  • allow_unicode - разрешает использование Unicode-символов (по умолчанию False);
  • unique - указывает, что значение должно быть уникальным;
  • db_index - создает индекс для поля (по умолчанию True для SlugField);
  • blank - разрешает пустое значение в формах;
  • null - разрешает NULL в базе данных.

Важно отметить, что SlugField по умолчанию имеет параметр db_index=True, что делает его эффективным для поиска по слагам. Также это поле часто используется вместе с параметром unique=True для обеспечения уникальности URL-адресов.

Синтаксис

from django.db import models class Article(models.Model): title = models.CharField(max_length=100) slug = models.SlugField(max_length=50, unique=True)

Пример

Давайте создадим модель статьи с полем SlugField и добавим несколько записей:

from django.db import models class Article(models.Model): title = models.CharField(max_length=100) slug = models.SlugField(max_length=50, unique=True, blank=True) def __str__(self): return self.title
from myapp.models import Article # Создание статьи с слагом article1 = Article.objects.create( title="My First Article", slug="my-first-article" ) # Создание статьи без указания слага (будет пусто) article2 = Article.objects.create( title="Hello World" ) print(article1.slug) print(article2.slug)

Результат выполнения кода:

"my-first-article" ""

Пример

Давайте используем параметр allow_unicode=True для поддержки кириллицы в слагах:

from django.db import models class Category(models.Model): name = models.CharField(max_length=100) slug = models.SlugField(max_length=50, unique=True, allow_unicode=True)
from myapp.models import Category # Создание категории с кириллическим слагом category = Category.objects.create( name="Новости", slug="новости" ) # Поиск по слагу found = Category.objects.get(slug="новости") print(found.name)

Результат выполнения кода:

"Новости"

Пример

Давайте используем SlugField для создания ЧПУ-адресов в URL конфигурации:

# urls.py from django.urls import path from myapp import views urlpatterns = [ path('article/<slug:slug>/', views.article_detail, name='article_detail'), ]
# views.py from django.shortcuts import get_object_or_404 from myapp.models import Article def article_detail(request, slug): article = get_object_or_404(Article, slug=slug) return render(request, 'article_detail.html', {'article': article})
from myapp.models import Article # Получение статьи по слагу через URL # В браузере: /article/my-first-article/ # Программное получение статьи article = Article.objects.get(slug="my-first-article") print(article.title)

Результат выполнения кода:

"My First Article"

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

  • поле CharField,
    которое используется для хранения строк небольшой длины
  • поле TextField,
    которое предназначено для хранения больших текстов
  • поле URLField,
    которое используется для хранения URL-адресов
  • метод get_absolute_url,
    который возвращает URL для объекта модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить