Валидатор validate_unicode_slug

Валидатор validate_unicode_slug предназначен для проверки, что переданная строка может использоваться в качестве слага, содержащего юникод-символы. В отличие от валидатора validate_slug, который допускает только латиницу, этот валидатор разрешает использование букв из любого алфавита, цифр, дефисов и знаков подчеркивания. Валидатор вызывается с одним обязательным аргументом - строкой для проверки, и выбрасывает исключение ValidationError, если строка не соответствует требованиям слага.

Синтаксис

pythonfrom django.core.validators import validate_unicode_slug
from django.core.exceptions import ValidationError

validate_unicode_slug(value)

Пример

Давайте проверим строку, которая является допустимым юникод-слагом:

pythonfrom 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}")

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

python"Строка является допустимым слагом"

Пример

Давайте проверим строку, которая содержит пробелы и специальные символы:

pythonfrom 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}")

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

python"Ошибка: Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."

Пример

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

pythonfrom 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:

pythonfrom 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

Теперь создадим экземпляр формы с корректным значением:

pythonform = ArticleForm({'slug': 'статья-о-джанго'})
res = form.is_valid()
print(res)
print(form.cleaned_data)

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

pythonTrue
{'slug': 'статья-о-джанго'}

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

  • валидатор validate_slug,
    который проверяет строку на соответствие латинскому слагу
  • валидатор validate_email,
    который проверяет корректность email-адреса
  • валидатор URLValidator,
    который проверяет корректность URL-адреса
  • валидатор RegexValidator,
    который проверяет строку по регулярному выражению