Поле 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 для объекта модели