Валидатор validate_unicode_slug
Валидатор validate_unicode_slug предназначен для проверки,
что переданная строка может использоваться в качестве слага,
содержащего юникод-символы. В отличие от валидатора validate_slug,
который допускает только латиницу, этот валидатор разрешает
использование букв из любого алфавита, цифр, дефисов и знаков
подчеркивания. Валидатор вызывается с одним обязательным аргументом -
строкой для проверки, и выбрасывает исключение ValidationError,
если строка не соответствует требованиям слага.
Синтаксис
from django.core.validators import validate_unicode_slug
from django.core.exceptions import ValidationError
validate_unicode_slug(value)
Пример
Давайте проверим строку, которая является допустимым юникод-слагом:
from django.core.validators import validate_unicode_slug
from django.core.exceptions import ValidationError
try:
validate_unicode_slug("привет-мир_2025")
print("Строка является допустимым слагом")
except ValidationError as e:
print(f"Ошибка: {e.message}")
Результат выполнения кода:
"Строка является допустимым слагом"
Пример
Давайте проверим строку, которая содержит пробелы и специальные символы:
from django.core.validators import validate_unicode_slug
from django.core.exceptions import ValidationError
try:
validate_unicode_slug("привет мир!")
print("Строка является допустимым слагом")
except ValidationError as e:
print(f"Ошибка: {e.message}")
Результат выполнения кода:
"Ошибка: Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
Пример
Использование валидатора в поле модели Django:
from django.db import models
from django.core.validators import validate_unicode_slug
class Article(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(validators=[validate_unicode_slug], allow_unicode=True)
def __str__(self):
return self.title
Пример
Использование валидатора в форме Django:
from django import forms
from django.core.validators import validate_unicode_slug
from django.core.exceptions import ValidationError
class ArticleForm(forms.Form):
slug = forms.CharField(validators=[validate_unicode_slug])
def clean_slug(self):
data = self.cleaned_data['slug']
try:
validate_unicode_slug(data)
except ValidationError as e:
raise forms.ValidationError(e.message)
return data
Теперь создадим экземпляр формы с корректным значением:
form = ArticleForm({'slug': 'статья-о-джанго'})
res = form.is_valid()
print(res)
print(form.cleaned_data)
Результат выполнения кода:
True
{'slug': 'статья-о-джанго'}
Смотрите также
-
валидатор
validate_slug,
который проверяет строку на соответствие латинскому слагу -
валидатор
validate_email,
который проверяет корректность email-адреса -
валидатор
URLValidator,
который проверяет корректность URL-адреса -
валидатор
RegexValidator,
который проверяет строку по регулярному выражению