SlugField
SlugField - это поле формы, предназначенное для ввода и валидации слаг-строк. Слаг - это часть URL-адреса, которая обычно формируется из заголовка статьи, названия товара или другого текста и содержит только безопасные символы. По умолчанию поле проверяет, что строка состоит из латинских букв, цифр, символов дефиса (-) и подчёркивания (_). Это поле часто используется в формах для создания новых записей или редактирования существующих, чтобы гарантировать корректность формируемых ссылок.
При создании экземпляра поля можно передать набор параметров, которые управляют его поведением. Основные параметры: max_length определяет максимальную длину строки, required указывает, обязательно ли поле для заполнения, label задаёт текстовую метку, а initial позволяет установить начальное значение. Дополнительно можно передать параметр allow_unicode со значением True, чтобы разрешить использование символов Unicode в слаге.
Синтаксис
from django import forms
class MyForm(forms.Form):
slug = forms.SlugField(
max_length=100,
required=True,
label="Slug",
initial="default-slug"
)
Пример . Использование в форме
Определим простую форму для создания статьи с полем для слага:
from django import forms
class ArticleForm(forms.Form):
title = forms.CharField(max_length=200, label="Заголовок")
slug = forms.SlugField(max_length=100, label="Слаг", help_text="Только латиница, цифры, дефис и подчёркивание")
content = forms.CharField(widget=forms.Textarea, label="Содержание")
Пример . Валидация и обработка данных
Создадим экземпляр формы с переданными данными и проверим, прошла ли она валидацию. Если данные корректны, слаг можно использовать для построения URL-адреса:
from django import forms
class ArticleForm(forms.Form):
title = forms.CharField(max_length=200)
slug = forms.SlugField(max_length=100)
content = forms.CharField(widget=forms.Textarea)
# Пример корректных данных
data = {
"title": "Моя первая статья",
"slug": "moya-pervaya-statya",
"content": "Текст статьи..."
}
form = ArticleForm(data)
if form.is_valid():
print("Форма валидна")
print(f"Слаг: {form.cleaned_data['slug']}")
else:
print("Ошибки валидации:", form.errors)
Результат выполнения кода:
"Форма валидна"
"Слаг: moya-pervaya-statya"
Пример . С некорректными данными
Попробуем передать строку, содержащую недопустимые символы, например, пробелы или кириллицу (при выключенном параметре allow_unicode):
from django import forms
class ArticleForm(forms.Form):
title = forms.CharField(max_length=200)
slug = forms.SlugField(max_length=100)
content = forms.CharField(widget=forms.Textarea)
# Некорректные данные: пробел и кириллица
invalid_data = {
"title": "Моя вторая статья",
"slug": "моя статья 2",
"content": "Текст статьи..."
}
form = ArticleForm(invalid_data)
if form.is_valid():
print("Форма валидна")
else:
print("Ошибки валидации:", form.errors)
print("Ошибка в поле slug:", form.errors.get("slug"))
Результат выполнения кода:
"Ошибки валидации: <ul class='errorlist'><li>slug<ul class='errorlist'><li>Введите корректный слаг, состоящий из букв, цифр, дефисов и подчёркиваний.</li></ul></li></ul>"
"Ошибка в поле slug: ['Введите корректный слаг, состоящий из букв, цифр, дефисов и подчёркиваний.']"
Пример . С поддержкой Unicode
Если требуется разрешить использование символов Unicode в слаге, передайте параметр allow_unicode=True:
from django import forms
class UnicodeSlugForm(forms.Form):
slug = forms.SlugField(allow_unicode=True, label="Unicode-слаг")
data = {"slug": "привет-мир-2024"}
form = UnicodeSlugForm(data)
if form.is_valid():
print("Форма валидна")
print(f"Слаг: {form.cleaned_data['slug']}")
else:
print("Ошибки:", form.errors)
Результат выполнения кода:
"Форма валидна"
"Слаг: привет-мир-2024"
Смотрите также
-
поле
CharField,
которое используется для ввода обычных строк без специальной валидации -
поле
RegexField,
которое позволяет задать собственное регулярное выражение для валидации -
метод
validate_slug,
который используется для ручной проверки строки на корректность слага -
метод
validate_unicode_slug,
который проверяет слаг с поддержкой Unicode