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






От здесь.
“Slug” is a newspaper term, but what it means here is the final bit of the URL. For example, a post with the title, “A bit about Django” would become, “bit-about-django” automatically (you can, of course, change it easily if you don’t like the auto-generated slug).
Это описательная часть URL-адреса, которая предназначена для того, чтобы сделать его более понятным для людей, но не обязательно требуется веб-серверу - в Что такое «слизняк» в Django? ярлык - это 'in-django-what-is-a-slug', но он не используется для определения страница обслужена (по крайней мере, на этом сайте)
«Слаг» - это способ создания действительного URL-адреса, обычно с использованием уже полученных данных. Например, ярлык использует заголовок статьи для создания URL-адреса. Я советую сгенерировать слаг с помощью функции, учитывая заголовок (или другой фрагмент данных), а не настраивать его вручную.
Пример:
<title> The 46 Year Old Virgin </title>
<content> A silly comedy movie </content>
<slug> the-46-year-old-virgin </slug>
Теперь давайте представим, что у нас есть модель Django, например:
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField(max_length=1000)
slug = models.SlugField(max_length=40)
Как бы вы сослались на этот объект с помощью URL-адреса и значимого имени? Например, вы можете использовать Article.id, чтобы URL-адрес выглядел так:
www.example.com/article/23
Или вы можете захотеть сослаться на заголовок следующим образом:
www.example.com/article/The 46 Year Old Virgin
Поскольку пробелы в URL-адресах недопустимы, их необходимо заменить на %20, что приведет к:
www.example.com/article/The%2046%20Year%20Old%20Virgin
Обе попытки не приводят к очень значимому и легко читаемому URL. Это лучше:
www.example.com/article/the-46-year-old-virgin
В этом примере the-46-year-old-virgin - это ярлык: он создается из заголовка путем перевода всех букв в нижний регистр и замены пробелов дефисами -.
Также см. URL-адрес этой самой веб-страницы для другого примера.
Хорошее описание, но нужно добавить: SlugField не гарантирует уникальность из коробки, поэтому, если вы используете его по умолчанию, это лучший URL: www.example.com/article/the-40-year-old-virgin/23 / Где «23» - это article.id, и это то, что фактически используется для выполнения запроса (также быстрее, чем запрос по слагу).
Мне удобнее читать www.example.com/article/23/the-40-year-old-virgin.
Если вы обслуживаете контент на основе идентификатора, решите, следует ли проверять, соответствует ли заголовок содержимому (и возвращать 404, если это не так), или полностью игнорировать его. Я не думаю, что существует какое-то общее правило в отношении того, что лучше всего с точки зрения SEO. SO по-прежнему будет отображать эту страницу, если вы введете stackoverflow.com/questions/427102/… в своем браузере.
@Daniel Просто имейте в виду, что слаг также скрывает реальный идентификатор базы данных, поэтому в вашем примере нет одного преимущества использования слага.
@Eno, действительно, не должно быть необходимости скрывать идентификаторы базы данных - в любом случае предполагайте, что все ваши URL-адреса публично известны.
@Josh Yeah / article / 4358639485639 гораздо более оптимизирован для SEO, чем article / title.html.
@Eno, слаг добавлен для SEO и приятности постоянных ссылок. Идентификатор используется для индексированного поиска. SEO для stackoverflow великолепен - и они используют именно эту стратегию. Ваш аргумент был «скрыть идентификатор базы данных», который вы теперь передали в «SEO». Что дальше?
Итак, если мы сохраняем названия тем с помощью кратких заголовков (например, базы данных или «администрирование базы данных»), должны ли мы просто индексировать и искать на основе столбца заголовка вместо столбца имени?
Очень хороший пример для определения slug
обратите внимание на URL-адрес текущей страницы, https://stackoverflow.com/questions/427102/what-is-a-slug-in-django, ярлык - what-is-a-slug-in-django
Термин «слизняк» пришел из мира газетного производства.
Это неформальное название, данное истории в процессе производства. По мере того, как история петляет от репортера ритмов (предполагая, что они даже существовать больше?) До редактора и заканчивая «печатными станками», это имя, под которым она ссылается, например: «Исправили ли вы эти ошибки в ' история Кейт-и-Уильям? ".
Некоторые системы (например, Django) используют слаг как часть URL-адреса для поиска истории, например www.mysite.com/archives/kate-and-william.
Даже сам Stack Overflow делает это с самореференционным https://stackoverflow.com/questions/427102/what-is-a-slug-in-django/427201#427201 GEB-ish(a), хотя вы можете заменить слаг на blahblah, и он все равно сочтет его нормальным.
Это может быть даже раньше, поскольку в сценариях в начале каждой сцены были «промежуточные строки», которые в основном устанавливали фон для этой сцены (где, когда и так далее). Это очень похоже в том смысле, что это краткое изложение или преамбула того, что следует.
На машине Linotype пуля представляла собой кусок металла в одну линию, созданный из отдельных буквенных форм. Благодаря созданию одного слага для всей строки это значительно улучшило старый посимвольный композитинг.
Хотя нижеследующее является чистой гипотезой, раннее значение «слизняк» означало фальшивую монету (которую нужно было каким-то образом отжать). Я мог предвидеть, что это использование будет преобразовано в печатный термин (поскольку ярлык нужно было нажимать с использованием исходных символов) и оттуда перейти от определения «кусок металла» к определению «краткое изложение истории». Отсюда всего несколько шагов от правильной печати до онлайн-мира.
(a) «Гедель Эшер, Бах», автор Дуглас Хофштадтер, который я (по крайней мере) считаю одним из величайших современных интеллектуальных произведений. Вам также стоит посмотреть его другую работу «Метамагические темы».
Если можно, я приведу некоторый исторический контекст:
Термин "слизняк" имеет отношение к отливке металла, в данном случае свинца, из которого были изготовлены печатные шрифты. Затем каждая бумага имела свою фабрику шрифтов, которая регулярно переплавлялась и переделывалась в новые формы, так как после многих отпечатков они изнашивались. Такие ученики, как я, начали свою карьеру там и дошли до вершины (уже не сейчас).
Типографам приходилось составлять текст статьи в обратном порядке, при этом ведущие символы располагались в определенном порядке. Так что во время печати буквы будут прямо на бумаге. Все типографы могли читать газету с зеркальным отображением так же быстро, как и печатную. Поэтому слизней (например, улиток), а также медленных историй (которые были исправлены последними) было много на скамейке в ожидании, идентифицируемых исключительно по их первым буквам, в основном весь заголовок в целом более читабельный. Некоторые "горячие" новости ждали там, на стенде, для возможного исправления в последнюю минуту (Вечерняя газета) перед последней сборкой и окончательной печатью.
Джанго вышел из офиса журнала Лоуренс в Канзасе. Где, вероятно, еще сохранился какой-то печатный жаргон. Энтузиаст-джанго - и - дружелюбный-старый-слизняк-из-Франции.
Также автоматическая установка в django-admin. Добавлено в ModelAdmin:
prepopulated_fields = {'slug': ('title', )}
Как здесь:
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'slug')
search_fields = ('content', )
prepopulated_fields = {'slug': ('title', )}
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. (as in Django docs)
Поле заголовка в Django используется для хранения и генерации действительного URL для ваших динамически создаваемых веб-страниц.
Точно так же, как вы добавили этот вопрос в Stack Overflow, и была сгенерирована динамическая страница, и когда вы увидите в адресной строке, вы увидите заголовок своего вопроса со знаком «-» вместо пробелов. Это как раз работа слизнякового поля.

The title entered by you was something like this -> What is a “slug” in Django?
On storing it into a slug field it becomes "what-is-a-slug-in-django" (see URL of this page)
Слаг - это удобная для URL-адресов короткая метка для определенного контента. Он содержит только буквы, цифры, знаки подчеркивания или дефисы. Заголовки обычно сохраняются с соответствующим содержимым и передаются в виде строки URL.
Слаг можно создавать с помощью SlugField
Бывший:
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=100)
Если вы хотите использовать заголовок в качестве ярлыка, в django есть простая функция под названием slugify.
from django.template.defaultfilters import slugify
class Article(models.Model):
title = models.CharField(max_length=100)
def slug(self):
return slugify(self.title)
Если нужна уникальность, добавьте unique=True в поле slug.
например, из предыдущего примера:
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, unique=True)
Вам лень делать slug process? не волнуйтесь, этот плагин вам поможет. django-autoslug
слизняк
Короткая метка для чего-либо, содержащая только буквы, цифры, подчеркивания или дефисы. Обычно они используются в URL-адресах. Например, в типичном URL-адресе записи в блоге:
https://www.djangoproject.com/weblog/2008/apr/12/spring/ последний кусок (пружина) - это слизняк.
Короче говоря, слаг помогает избавиться от этих уродливых URL-адресов с допустимыми URL-адресами для примеров на сайте ecommerec вместо того, чтобы показывать URL-адрес как www.myecom.com/product/5432156, я могу показать его как www.myecom.com/product/iphone11 с помощью slug
Это способ создания действительного URL-адреса, как правило, с использованием уже полученных данных. Например, использование заголовка статьи для создания URL-адреса.
Чтобы мгновенно понять, посмотрите URL-адрес того сайта, на котором вы находитесь:
https://stackoverflow.com/questions/{id}/{slug}.