• Почему этот код выкидывает ошибку "NameError: name 'BarCode' is not defined"?

    Vindicar
    @Vindicar
    RTFM!
    BarCode еще не определен на момент его упоминания в аннотации.
    Либо поставь BarCode выше чем Product, либо замени List[BarCode] на List['BarCode'] (опережающая ссылка), либо добавь в начало from __future__ import annotations (делает ссылки опережающими автоматически).
    Ответ написан
    1 комментарий
  • Как пользоваться функцией slugify в Django?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Гляньте в реализацию функции:
    def slugify(value, allow_unicode=False):
        """
        Convert to ASCII if 'allow_unicode' is False. Convert spaces to hyphens.
        Remove characters that aren't alphanumerics, underscores, or hyphens.
        Convert to lowercase. Also strip leading and trailing whitespace.
        """

    Функция slugify - сконвертировать в ASCII если allow_unicode False, преобразовать пробелы в дефисы, удалить символы которые не являются буквенно-цифровыми, подчеркиваниями или дефисами, конвертировать в нижний регистр и удалить пробелы в начале и конце

    Транслитерация кириллицы в эту функцию не входит

    По умолчанию там для строки выполняются такие шаги:
    In [1]: unicodedata.normalize('NFKD', 'привет world')                                                                                                                                          
    Out[1]: 'привет world'
    
    In [2]: 'привет world'.encode('ascii', 'ignore').decode('ascii')                                                                                                                               
    Out[2]: ' world'

    Вот собственно .encode('ascii', 'ignore') отбрасывает символы кириллицы, так как они не являются ascii-символами
    Как вариант:
    In [3]: my_string = 'привет world'.translate(
      str.maketrans(
        "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ",
        "abvgdeejzijklmnoprstufhzcss_y_euaABVGDEEJZIJKLMNOPRSTUFHZCSS_
        ...: Y_EUA"
    ))                                                                                                                                                                               
    
    In [4]: slugify(my_string)                                                                                                                                                                     
    Out[4]: 'privet-world'
    Ответ написан
    Комментировать