Что такое «слизняк» в Django?

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

(Я прочитал его определение в этот глоссарий.)

Чтобы мгновенно понять, посмотрите URL-адрес того сайта, на котором вы находитесь: https://stackoverflow.com/questions/{id}/{slug}.

Agustín Lado 14.08.2020 09:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
649
1
195 682
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

От здесь.

“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, и это то, что фактически используется для выполнения запроса (также быстрее, чем запрос по слагу).

Daniel Naab 09.01.2009 08:56

Мне удобнее читать www.example.com/article/23/the-40-year-old-virgin.

MiniQuark 09.01.2009 15:43

Если вы обслуживаете контент на основе идентификатора, решите, следует ли проверять, соответствует ли заголовок содержимому (и возвращать 404, если это не так), или полностью игнорировать его. Я не думаю, что существует какое-то общее правило в отношении того, что лучше всего с точки зрения SEO. SO по-прежнему будет отображать эту страницу, если вы введете stackoverflow.com/questions/427102/… в своем браузере.

Tomas Andrle 02.09.2009 21:16

@Daniel Просто имейте в виду, что слаг также скрывает реальный идентификатор базы данных, поэтому в вашем примере нет одного преимущества использования слага.

Eno 26.05.2012 01:31

@Eno, действительно, не должно быть необходимости скрывать идентификаторы базы данных - в любом случае предполагайте, что все ваши URL-адреса публично известны.

Josh Smeaton 26.05.2012 09:58

@Josh Yeah / article / 4358639485639 гораздо более оптимизирован для SEO, чем article / title.html.

Eno 27.05.2012 22:41

@Eno, слаг добавлен для SEO и приятности постоянных ссылок. Идентификатор используется для индексированного поиска. SEO для stackoverflow великолепен - и они используют именно эту стратегию. Ваш аргумент был «скрыть идентификатор базы данных», который вы теперь передали в «SEO». Что дальше?

Josh Smeaton 28.05.2012 02:30

Итак, если мы сохраняем названия тем с помощью кратких заголовков (например, базы данных или «администрирование базы данных»), должны ли мы просто индексировать и искать на основе столбца заголовка вместо столбца имени?

Jaigus 02.07.2017 20:27

Очень хороший пример для определения slug

Sanjeev S 15.02.2019 12:28

обратите внимание на URL-адрес текущей страницы, https://stackoverflow.com/questions/427102/what-is-a-slug-in‌​-django, ярлык - what-is-a-slug-in-django

WeizhongTu 05.02.2020 16:39

Термин «слизняк» пришел из мира газетного производства.

Это неформальное название, данное истории в процессе производства. По мере того, как история петляет от репортера ритмов (предполагая, что они даже существовать больше?) До редактора и заканчивая «печатными станками», это имя, под которым она ссылается, например: «Исправили ли вы эти ошибки в ' история Кейт-и-Уильям? ".

Некоторые системы (например, 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, и была сгенерирована динамическая страница, и когда вы увидите в адресной строке, вы увидите заголовок своего вопроса со знаком «-» вместо пробелов. Это как раз работа слизнякового поля.

Enter image description here

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-адреса.

Другие вопросы по теме