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

589

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

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

Jonas
источник

Ответы:

753

«Слаг» - это способ создания действительного 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 этой самой веб-страницы для другого примера.

Джош Смитон
источник
72
Хорошее описание, но добавим: SlugField не обеспечивает уникальность «из коробки», поэтому, если вы используете его по умолчанию, это лучший URL: www.example.com/article/the-40-year-old-virgin/23 / Где '23' - это article.id и то, что фактически используется для выполнения запроса (также быстрее, чем запросы к слагу).
Даниэль Нааб
126
Я считаю, что www.example.com/article/23/the-40-year-old-virgin легче читать.
MiniQuark
16
Если вы обслуживаете контент на основе идентификатора, решите, проверять, соответствует ли слаг контенту (и возвращает 404, если это не так), или полностью его игнорировать. Я не думаю, что есть общее правило для того, что лучше, с точки зрения SEO. SO по-прежнему будет отображать эту страницу, если вы введете stackoverflow.com/questions/427102/… в вашем браузере.
Томас Андрле
2
@Daniel Помните, что слаг также скрывает реальный идентификатор базы данных, поэтому ваш пример лишает вас преимущества использования слаг.
Ино
15
@Eno the slug добавлен для SEO и постоянной ссылки. Идентификатор используется для индексированного поиска. SEO для stackoverflow великолепен - и они используют именно эту стратегию. Ваш аргумент был «скрыть идентификатор базы данных», который вы теперь превратили в «SEO». В чем дело?
Джош Смитон
134

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

Термин «слизняк» имеет отношение к отливке металла, в данном случае к свинцу, из которого были сделаны печатные шрифты. Затем каждая бумага имела свои фабрики шрифтов, которые регулярно переплавлялись и превращались в свежие формы, так как после многих отпечатков они изнашивались. Ученики, подобные мне, начинали свою карьеру там и прошли весь путь до вершины (больше нет).

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

Джанго вышел из офиса журнала Лоуренса в Канзасе. Где, вероятно, какой-то печатный жаргон все еще задерживается. A-Джанго-энтузиаст - & - дружественно старый слизняк-мальчик из-Франции.

Praveen
источник
61

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

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

Некоторые системы (например, Django) используют слаг как часть URL, чтобы найти историю, например www.mysite.com/archives/kate-and-william.

Даже сам Stack Overflow делает это с помощью самореференции GEB-ish (a)/programming/427102/what-is-a-slug-in-django/427201#427201 , хотя вы можете заменить слаг на, blahblahи он все равно найдет его в порядке.

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

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

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


(а) «Годел Эшер, Бах» Дугласа Хофштадтера , который я (по крайней мере) считаю одним из великих современных интеллектуальных произведений. Вы должны также проверить его другую работу, "Metamagical Themas".

paxdiablo
источник
29

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

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

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

Введите описание изображения здесь

Введенное вами название было примерно таким -> Что такое «слизняк» в Джанго?

При хранении его в поле слагов он становится "что-то-слаг-в-джанго" (см. URL этой страницы)

Манджит Кумар
источник
27

От сюда .

«Слизень» - это газетный термин, но здесь он означает последний бит URL. Например, пост с заголовком «Немного о Джанго» автоматически станет «немного о Джанго» (вы, конечно, можете легко изменить его, если вам не нравится автоматически созданный слаг).

BobbyShaftoe
источник
18

Это описательная часть URL, которая предназначена для того, чтобы сделать его более понятным для человека, но не обязательно запрашиваемым веб-сервером. Что такое «слаг» в Django? слаг - это «in-django-what-is-a-slug», но слаг не используется для определения обслуживаемой страницы (по крайней мере, на этом сайте)

Cebjyre
источник
17

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

Slug можно создавать с помощью SlugField

Пример:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)

Если вы хотите использовать title как slug, у 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в поле слаг.

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

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, unique=True)

Тебе лень делать слизняк? не волнуйтесь, этот плагин поможет вам. Джанго-autoslug

Simplans
источник
8

Также авто слаг у django-admin. Добавлено в ModelAdmin:

prepopulated_fields = {'slug': ('title', )}

Как здесь:

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug')
    search_fields = ('content', )

    prepopulated_fields = {'slug': ('title', )}
Алексей Кузьмин
источник
4

слизень

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

https://www.djangoproject.com/weblog/2008/apr/12/spring/ последний бит (пружина) - это слизень.

Соня Рани
источник