Задать вопрос
  • Как пользоваться функцией 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'
    Ответ написан
    Комментировать
  • Генерация из HTML шаблона в PDF с кириллицей в Django 2.x (xhtml2pdf)?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Рендер не может сам загружать ссылки, поэтому не может получить шрифт /static/fonts/OpenSans/OpenSans-Regular.ttf. У функции pisaDocument есть параметр link_callback, в который можно передать функцию преобразующую http-адреса в локальные пути. Например такую:
    def fetch_pdf_resources(uri, rel):
        if uri.find(settings.MEDIA_URL) != -1:
            path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ''))
        elif uri.find(settings.STATIC_URL) != -1:
            path = os.path.join(settings.STATIC_ROOT, uri.replace(settings.STATIC_URL, ''))
        else:
            path = None
        return path
    
    
    pdf = pisa.pisaDocument(BytesIO(template.encode('UTF-8')), result,
                                                               encoding='utf-8',
                                                               link_callback=fetch_pdf_resources)
    Ответ написан
    2 комментария
  • Oшибка в консоле: System check identified 4 issues (0 silenced)?

    crazyzubr
    @crazyzubr
    Python backend-developer
    По имеющемуся коду могу сделать вывод, что вы добавляете кастомную модель пользователя. Похоже в settings.py не был указан параметр:

    AUTH_USER_MODEL = 'accounts.User'

    Подробнее в документации
    Ответ написан
    Комментировать