что такое slug в django

SlugField — Django Models

Slug — это, по сути, короткий ярлык для чего-либо, содержащий только буквы, цифры, подчеркивания или дефисы. Они обычно используются в URL. Например, в типичном URL записи в блоге:

Здесь последней add-the-slug-field-inside-django-model является слаг.

SlugField:

Синтаксис

SlugField имеет следующие необязательные аргументы:

Если True, поле принимает буквы Unicode в дополнение к буквам ASCII. По умолчанию False.

Модель Django SlugField Объяснение

Refer to the following articles to check how to create a project and an app in Django.

from django.db import models

from django.db.models import Model

# Создайте свои модели здесь.

geeks_field = models.SlugField(max_length = 200 )

Добавьте приложение гиков в INSTALLED_APPS

Теперь, когда мы запускаем команду makemigrations из терминала,

В каталоге geeks будет создана новая папка с именем migrations с файлом с именем 0001_initial.py

# Сгенерировано Django 2.2.5 на 2019-09-25 06:00

from django.db import migrations, models

Таким образом, поле geeks_field SlugField создается при запуске миграций в проекте.

Как использовать SlugField?

SlugField используется для хранения в основном хранения путей URL после определенного URL. Чтобы узнать больше о том, как правильно добавить SlugField в Django Project, обратитесь к этой статье — Добавьте поле slug в Django Model.

# импорт модели
# из приложения гиков

from geeks.models import GeeksModel

# создание экземпляра
# GeeksModel

Теперь давайте проверим это на административном сервере. Мы создали экземпляр GeeksModel.
что такое slug в django. riaclatitipomje560598. что такое slug в django фото. что такое slug в django-riaclatitipomje560598. картинка что такое slug в django. картинка riaclatitipomje560598.

Параметры поля

Параметры поля — это аргументы, данные каждому полю для применения некоторого ограничения или передачи определенной характеристики конкретному полю. Например, добавление аргумента null = True в SlugField позволит ему хранить пустые значения для этой таблицы в реляционной базе данных.
Вот параметры поля и атрибуты, которые может использовать SlugField.

Источник

Добавляем слаги (slug) к URL-адресам

На этом занятии мы сделаем отображение отдельных статей по их слагу (slug). Если кто не знает, то slug – это уникальный фрагмент URL-адреса, ассоциированный с конкретной записью и, обычно, состоит из набора маленьких латинских букв, цифр, символов подчеркивания и дефиса. Например, статья «Арифметические операции» на сайте https://proproprogs.ru доступна по следующему адресу:

что такое slug в django. image001. что такое slug в django фото. что такое slug в django-image001. картинка что такое slug в django. картинка image001.

Здесь slug – это последние символы, по которым и выбирается данная страница из БД. Использование слагов – рекомендуемая практика в веб-программировании. Такие страницы лучше ранжируются поисковыми системами и понятнее конечному пользователю.

Давайте вначале сделаем отображение статей по их идентификатору, а затем, заменим адрес на слаг. У нас уже есть функция-заглушка show_post() в файле women/views.py. Мы ее перепишем, следующим образом:

Здесь функция get_object_or_404 выбирает одну запись из таблицы Women, которая имеет идентификатор, равный post_id, либо генерирует исключение 404, если запись не была найдена. Это довольно частая операция, когда нужно найти какую-либо отдельную запись, а в противном случае, перенаправить пользователя на заготовленную страницу 404. Поэтому в Django для таких случаев заготовлена специальная функция.

Далее, формируется словарь из параметров шаблона и отображается страница на основе шаблона post.html. У нас пока нет такого файла, добавим его со следующим содержимым:

Здесь все достаточно очевидно. Вначале отображаем заголовок h1, затем, фотографию статьи, если она есть, ну и потом уже содержимое самой статьи.

Если теперь перейти по ссылке, то увидим полноценную статью. Если же указать неверный адрес, то получим исключение 404. Повторю еще раз, исключения в таком развернутом виде отображаются только в режиме отладки сайта. При эксплуатации с константой DEBUG = False вместо исключения отображается заготовленная страница 404.

Добавление слага

Следующим шагом сделаем отображение статей по их слагу. Но откуда нам его взять? Для этого в модели Women необходимо прописать еще одно поле, которое так и назовем – slug:

Я его определил после поля title, указал уникальным, индексируемым и имя URL, отображаемое в админке. Однако, если сейчас попытаться создать миграцию для внесения этих изменений в структуру таблицы women:

python manage.py makemigrations

то увидим предупреждение, что поле не может быть пустым (так как у нас есть записи в таблице). Чтобы таблицы были сформированы как надо, я решил создать БД заново. Поэтому сразу добавил такое же поле в модели Category:

Удалим все файлы миграций, прежний файл БД и выполним команду

python manage.py makemigrations

для создания первой мигации. Затем, с помощью команды:

python manage.py migrate

сформируем таблицы с новыми структурами. Этот пример хорошо показывает, как важно заранее продумывать структуры таблиц для сайта. Осталось восстановить записи в БД. Для этого я заново создам суперпользователя для админки:

python manage.py createsuperuser

с именем root, почтой root@coolsite.ru и паролем 1234. Запускаем веб-сервер и заходим в админ-панель.

Для начала добавим категории. Здесь нам предлагается ввести ее название и слаг (URL). Конечно, можно заполнить оба поля вручную, например, «Актрисы» и «actrisi». Но, так как слаг, обычно, повторяет заголовок, только записанный латиницей, то фреймворк Django позволяет этот процесс автоматизировать. Давайте откроем файл women/admin.py и для модели Category в классе CategoryAdmin добавим атрибут:

Это специальное свойство, которое указывает фреймворку автоматически заполнять поле slug по данным поля name.

Возвращаемся в админку, обновляем страницу и, смотрите, при вводе строки в поле name, автоматически формируется поле slug. Это очень здорово и значительно облегчает нашу работу. Теперь можно совершенно спокойно добавить две рубрики «Актрисы» и «Певицы».

Далее, прежде чем добавлять статьи, сделаем такую же связку по слагу для модели Women в классе WomenAdmin:

только здесь мы указываем поле title. Возвращаемся в админ-панель и на вкладке добавления женщин введем информацию по актрисам:

Анджелина Джоли, Дженнифер Лоуренс, Джулия Робертс, Марго Робби, Ума Турман

А также по певицам:

Ариана Гранде, Бейонсе, Кэтти Перри, Рианна, Шакира

Отлично, база данных готова и теперь можно сделать отображение статей по слагу. Для этого откроем файл women/urls.py и в списке urlpatterns изменим маршрут для постов на следующий:

Затем, в файле women/views.py немного поменяем функцию представления show_post:

И в модели Women (в файле women/models.py) будем формировать URL-адрес по параметру slug:

Все, обновляем главную страницу сайта и видим, что теперь посты доступны по слагу, а не идентификатору. Этот пример показывает как в Django легко и просто можно менять URL-адреса и вместо id использовать другие поля, в частности, слаг. При этом, мы не производили совершенно никаких изменений в шаблонах, благодаря использованию метода get_absolute_url() в модели Women. Кроме того, Django автоматически защищает такие адреса от SQL-инъекций, когда злоумышленник пытается выполнить SQL-запрос, прописывая его в адресной строке браузера. Благодаря всем этим мелочам, которые берет на себя фреймворк, даже начинающий веб-мастер может конструировать вполне безопасные сайты с богатым функционалом.

Аналогичную операцию использования слагов можно сделать и для отображения рубрик. Предлагаю вам выполнить это самостоятельно для закрепления материала.

Видео по теме

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#2. Модель MTV. Маршрутизация. Функции представления

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#3. Маршрутизация, обработка исключений запросов, перенаправления

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#4. Определение моделей. Миграции: создание и выполнение

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#6. Шаблоны (templates). Начало

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#7. Подключение статических файлов. Фильтры шаблонов

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#8. Формирование URL-адресов в шаблонах

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#9. Создание связей между моделями через класс ForeignKey

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#10. Начинаем работу с админ-панелью

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#11. Пользовательские теги шаблонов

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#12. Добавляем слаги (slug) к URL-адресам

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#13. Использование форм, не связанных с моделями

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#14. Формы, связанные с моделями. Пользовательские валидаторы

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#15. Классы представлений: ListView, DetailView, CreateView

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#16. Основы ORM Django за час

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#18. Постраничная навигация (пагинация)

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#19. Регистрация пользователей на сайте

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#20. Делаем авторизацию пользователей на сайте

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#21. Оптимизация сайта с Django Debug Toolbar

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#22. Включаем кэширование данных

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#23. Использование капчи captcha

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#24. Тонкая настройка админ панели

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#25. Начинаем развертывание Django-сайта на хостинге

что такое slug в django. default. что такое slug в django фото. что такое slug в django-default. картинка что такое slug в django. картинка default.

#26. Завершаем развертывание Django-сайта на хостинге

© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Источник

Что такое «slug» в Django?

Когда я читаю код Django, я часто вижу в моделях то, что называется «slug». Я не совсем уверен, что это такое, но я знаю, что это имеет какое-то отношение к URLs. Как и когда предполагается использовать эту слизняковую штуку?

9 ответов

Я пытаюсь загрузить некоторые смайлики на определенный сайт. Обязательными полями являются: Кратчайший путь: Изображение: Категория: Предлагаемая Категория: Для изображения я просто выбираю его из своего файла. Поля категорий являются пояснительными. Я пытался войти в веб-url как shortcut, и.

A «slug»-это способ генерации действительного URL, как правило, с использованием уже полученных данных. Например, слизняк использует название статьи для создания URL. Я советую генерировать слизень с помощью функции, заданной заголовком (или другим фрагментом данных), а не устанавливать его вручную.

Теперь давайте представим, что у нас есть модель Django, такая как:

Как бы вы ссылались на этот объект с URL и со значимым именем? Вы могли бы, например, использовать Article.id, чтобы URL выглядело так:

Или вы можете сослаться на название следующим образом:

Обе попытки не приводят к очень значимым результатам, easy-to-read URL. Так будет лучше:

Также смотрите URL этой самой веб-страницы для другого примера.

Если я могу предоставить некоторый исторический контекст :

Термин «slug» имеет отношение к Литейному металлу-свинцу, в данном случае-из которого были изготовлены печатные шрифты. Каждая бумага в то время имела свою фабрику шрифтов, регулярно переплавляемую и переделываемую в новые формы, так как после многих отпечатков они изнашивались. Подмастерья вроде меня начинали там свою карьеру и шли до самого верха (теперь уже нет).

Типографы должны были составлять текст статьи в обратном порядке с помощью свинцовых символов, сложенных мудро. Так что во время печати буквы будут лежать прямо на бумаге. Все типографы могли читать газету в зеркальном отражении так же быстро, как и печатную. Поэтому слизни (как улитки), а также медленные рассказы (последние, которые будут исправлены) были многими на скамейке ожидания, идентифицируемыми исключительно по их кулачным буквам, в основном по всему названию, обычно более читабельному. Некоторые новости «hot» ждали там на скамейке, для возможного исправления в последнюю минуту, (вечерняя газета) перед последним assembly и окончательным печатанием.

Django вышел из офиса журнала Лоуренса в Канзасе. Где, вероятно, еще сохранился какой-то печатный жаргон. A-django-enthusiast-&-friendly-old-slug-boy-from-France.

Термин ‘slug’ происходит из мира газетного производства.

Он может даже датироваться более ранним временем, так как сценарии имели «slug lines» в начале каждой сцены, что в основном задает фон для этой сцены (где, когда и так далее). Это очень похоже на то, что это точная или преамбула того, что следует.

На Линотипной машине пуля представляла собой однолинейный кусок металла, который создавался из отдельных буквенных форм. Сделав один слиток для всей линии, это значительно улучшило старую композицию character-by-character.

Хотя нижеследующее является чистой гипотезой, раннее значение слова slug означало фальшивую монету (которую нужно было как-то оттиснуть). Я мог бы представить себе, что это употребление трансформируется в печатный термин (поскольку пуля должна была быть нажата с использованием оригинальных символов), а оттуда-переход от определения «кусок металла» к определению ‘story summary’. Отсюда-короткий шаг от правильной печати к онлайн-миру.

Я использую prepopulated_fields = в моей админке django и когда я набираю определенные слова, такие как this is the first slug в поле Заголовок только first-slug выводится в поле slug, и если я удалю букву tв поле title тогда полевой слизень будет выводить his-first-slug is и the.

Я обошел вокруг Django и последовал за танго с книгой Django, но этот последний выпуск достает меня после добавления подкатегорий, которые не включены в этот учебник. У меня есть следующее: models.py class Category(models.Model): Category name = models.CharField(max_length=50) slug =.

Слизняк-это газетный термин. Слизень-это короткая метка для чего-то, содержащая только буквы, цифры, подчеркивания или дефисы. Они обычно используются в URLs. (как и в Django docs)

Поле slug в Django используется для хранения и генерации действительных URLs для ваших динамически создаваемых веб-страниц.

Точно так же, как вы добавили этот вопрос на Stack Overflow, и была сгенерирована динамическая страница, и когда вы увидите в адресной строке заголовок вашего вопроса с «-» вместо пробелов. Это в точности работа поля слизней.

что такое slug в django. hUr5J. что такое slug в django фото. что такое slug в django-hUr5J. картинка что такое slug в django. картинка hUr5J.

При хранении его в поле slug он становится «what-is-a-slug-in-django» (см. URL этой страницы)

Slug-это удобный короткий ярлык URL для конкретного контента. Он содержит только буквы, цифры, подчеркивания или дефисы. Слизни обычно сохраняются с соответствующим содержимым, и оно передается как строка URL.

Слизень может создавать с помощью SlugField

Если вы хотите использовать title Как slug, то django имеет простую функцию под названием slugify

Если ему нужна уникальность, добавьте unique=True в поле slug.

например, из предыдущего примера:

Также auto slug at django-admin. Добавлено в ModelAdmin:

слизень

Короткая метка для чего-то, содержащая только буквы, цифры, подчеркивания или дефисы. Они обычно используются в URLs. Например, в типичной записи блога URL:

Похожие вопросы:

Django имеет свойство unique_for_date, которое вы можете установить при добавлении SlugField в вашу модель. Это приводит к тому, что слаг будет уникальным только для указанной даты поля: class.

models.py class Tag(models.Model): name = models.CharField(max_length=64, unique=True) slug = models.SlugField(max_length=255, unique=True) def save(self, *args, **kwargs): self.slug =.

Я пытаюсь загрузить некоторые смайлики на определенный сайт. Обязательными полями являются: Кратчайший путь: Изображение: Категория: Предлагаемая Категория: Для изображения я просто выбираю его из.

Я использую prepopulated_fields = в моей админке django и когда я набираю определенные слова, такие как this is the first slug в поле Заголовок только first-slug выводится в поле.

Я обошел вокруг Django и последовал за танго с книгой Django, но этот последний выпуск достает меня после добавления подкатегорий, которые не включены в этот учебник. У меня есть следующее.

Я только что начал использовать Django в течение некоторого времени, и я застрял, пытаясь работать со слизняком. Я знаю, что это такое, но мне трудно определить простой слизень и отобразить его в.

Источник

What is a «slug» in Django?

When I read Django code I often see in models what is called a «slug». I am not quite sure what this is, but I do know it has something to do with URLs. How and when is this slug-thing supposed to be used?

(I have read its definition in this glossary.)

12 Answers 12

A «slug» is a way of generating a valid URL, generally using data already obtained. For instance, a slug uses the title of an article to generate a URL. I advise to generate the slug by means of a function, given the title (or another piece of data), rather than setting it manually.

Now let’s pretend that we have a Django model such as:

How would you reference this object with a URL and with a meaningful name? You could for instance use Article.id so the URL would look like this:

Or, you might want to reference the title like this:

Both attempts are not resulting in very meaningful, easy-to-read URL. This is better:

Also see the URL of this very web page for another example.

If I may provide some historical context :

The term «slug» has to do with casting metal—lead, in this case—out of which the press fonts were made. Every paper then had its fonts factory regularly re-melted and recast in fresh molds, since after many prints they became worn out. Apprentices like me started their career there, and went all the way to the top (not anymore).

Typographs had to compose the text of an article in a backward manner with lead characters stacked in a wise. So at printing time the letters would be straight on the paper. All typographs could read the newspaper mirrored as fast as the printed one. Therefore the slugs, (like snails) also the slow stories (the last to be fixed) were many on the bench waiting, solely identified by their fist letters, mostly the whole title generally more readable. Some «hot» news were waiting there on the bench, for possible last minute correction, (Evening paper) before last assembly and definitive printing.

Django emerged from the offices of the Lawrence journal in Kansas. Where probably some printing jargon still lingers. A-django-enthusiast-&-friendly-old-slug-boy-from-France.

The term ‘slug’ comes from the world of newspaper production.

It’s an informal name given to a story during the production process. As the story winds its path from the beat reporter (assuming these even exist any more?) through to editor through to the «printing presses», this is the name it is referenced by, e.g., «Have you fixed those errors in the ‘kate-and-william’ story?».

It may even date back earlier than that, since screenplays had «slug lines» at the start of each scene, which basically sets the background for that scene (where, when, and so on). It’s very similar in that it’s a precis or preamble of what follows.

On a Linotype machine, a slug was a single line piece of metal which was created from the individual letter forms. By making a single slug for the whole line, this greatly improved on the old character-by-character compositing.

Although the following is pure conjecture, an early meaning of slug was for a counterfeit coin (which would have to be pressed somehow). I could envisage that usage being transformed to the printing term (since the slug had to be pressed using the original characters) and from there, changing from the ‘piece of metal’ definition to the ‘story summary’ definition. From there, it’s a short step from proper printing to the online world.

(a) «Godel Escher, Bach», by one Douglas Hofstadter, which I (at least) consider one of the great modern intellectual works. You should also check out his other work, «Metamagical Themas».

Источник

Django Slug Tutorial

In this tutorial we will add slugs to a Django website. As noted in the official docs: «Slug is a newspaper term. A slug is a short label for something, containing only letters, numbers, underscores or hyphens. They’re generally used in URLs.»

Despite their ubiquity, slugs can be somewhat challenging to implement the first time around, at least in my experience. Therefore we will implement everything from scratch so you can see how the pieces all fit together. If you are already comfortable implementing ListView and DetailView you can jump right to the Slug section.

Complete source code can be found on Github.

Set Up

To pay homage to Django’s origin at a newspaper, we’ll create a basic Newspaper website with Articles. If you need help installing Python, Django, and all the rest (see here for in-depth instructions).

Navigate to http://127.0.0.1:8000/ in your web browser to see the Django welcome page which confirms everything is configured properly.

что такое slug в django. django30 welcome. что такое slug в django фото. что такое slug в django-django30 welcome. картинка что такое slug в django. картинка django30 welcome.

Articles app

Since the focus of this tutorial is on slugs I’m going to simply give the commands and code to wire up this Articles app. Full explanations can be found in my book Django for Beginners!

Then update INSTALLED_APPS within our config/settings.py file to notify Django about the app.

Article Model

Django Admin

The Django admin is a convenient way to play around with models so we’ll use it. But first, create a superuser account.

And then update articles/admin.py to display our app within the admin.

Start up the server again with python manage.py runserver and navigate to the admin at http://127.0.0.1:8000/admin. Log in with your superuser account.

что такое slug в django. admin homepage. что такое slug в django фото. что такое slug в django-admin homepage. картинка что такое slug в django. картинка admin homepage.

Click on the «+ Add» next to the Articles section and add an entry.

что такое slug в django. admin article. что такое slug в django фото. что такое slug в django-admin article. картинка что такое slug в django. картинка admin article.

In addition to a model we’ll eventually need a URL, view, and template to display an Article page. I like to move to URLs next after models although the order doesn’t matter: we need all four before we can display a single page. The first step is to add the articles app to our project-level config/urls.py file.

Next we must create the app-level urls.py file.

We’ll have a ListView to list all articles and a DetailView for individual articles.

Views

For each view we specify the related model and appropriate not-yet-created template.

Templates

Type Control+c on the command line and create the new templates directory.

Now add the two new templates.

что такое slug в django. listview. что такое slug в django фото. что такое slug в django-listview. картинка что такое slug в django. картинка listview.

что такое slug в django. detailview. что такое slug в django фото. что такое slug в django-detailview. картинка что такое slug в django. картинка detailview.

Slugs

Moving along let’s add a migration file since we’ve updated our model.

Ack! What is this?! It turns out we already have data in our database, our single Article, so we can’t just willy-nilly add a new field on. Django is helpfully telling us that we either need to a a one-off default of null or add it ourself. Hmmm.

For this very reason, it is generally good advice to always add new fields with either null=True or with a default value.

Let’s take the easy approach of setting null=True for now. So type 2 on the command line. Then add this to our slug field.

Try to create a migrations file again and it will work.

Go ahead and migrate the database as well to apply the change.

что такое slug в django. empty slug. что такое slug в django фото. что такое slug в django-empty slug. картинка что такое slug в django. картинка empty slug.

Manually add in our desired value a-day-in-the-life and click «Save.»

что такое slug в django. admin slug. что такое slug в django фото. что такое slug в django-admin slug. картинка что такое slug в django. картинка admin slug.

And we’re done! Go to the list view page at http://127.0.0.1:8000/ and click on the link for our article.

что такое slug в django. url. что такое slug в django фото. что такое slug в django-url. картинка что такое slug в django. картинка url.

And there it is with our slug as the URL! Beautiful.

Unique and Null

Moving forward, do we really want to allow a null value for a slug? Probably not as it will break our site! Another consideration is: what happens if there are identical slugs? How will that resolve itself? The short answer is: not well.

Therefore let’s change our slug field so that null is not allowed and unique values are required.

Make migration/migrate. Need empty for past entry.

Select 2 since we can manually handle the existing row ourself, and in fact, already have. Then migrate the database.

PrePopulated Fields

Manually adding a slug field each time quickly becomes tedious. So we can use a prepopulated_field in the admin to automate the process for us.

Update articles/admin.py as follows:

Now head over to the admin and add a new article. You’ll note that as you type in the Title field, the Slug field is automatically populated. Pretty neat!

Signals, Lifecycle Hooks, Save, and Forms/Serializers

In the real world, it’s unlikely to simply provide admin access to a user. You could, but at scale it’s definitely not a good idea. And even on a small scale, most non-technical users will find a web interface more appealing.

So. how to auto-populate the slug field when creating a new Article. It turns out Django has a built-in tool for this called slugify!

An alternative to signals is to use a lifecycle hook via something like the django-lifecycle package. Lifecycle hooks are an alternative to Signals that provide similar functionality with less indirection.

Another common way to see this implemented is by overriding the Article model’s save method. This also «works» but is not the best solution. Here is one way to do that.

The best solution, in my opinion, is to create the slug in the form itself. This can be done by overriding the form’s clean method so that cleaned_data has the slug, or JavaScript can be used to auto-populate the field as is done in the Django admin itself. If you’re using an API, the same approach can be applied to the serializer.

This solution does not rely on a custom signal and handles the slug before it touches the database. In the words of Carlton Gibson, who suggested this approach to me, win-win-win.

Words of Caution

Next Steps

If you want to compare your code with the official source code, it can be found on Github.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *