Что такое «слизняк» в Джанго? - PullRequest
494 голосов
/ 09 января 2009

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

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

Ответы [ 9 ]

633 голосов
/ 09 января 2009

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

110 голосов
/ 15 августа 2009

Если можно, приведу исторический контекст:

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

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

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

51 голосов
/ 09 января 2009

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

Это неофициальное имя, данное истории в процессе производства. По мере того как история изворачивает свой мучительный путь от репортера бит до редактора и до «печатных машин», на это имя ссылаются, например, «Исправили ли вы эти ошибки в истории« Россия-cuts-europe-gas » ?».

Django использует его как часть URL, чтобы найти историю, например www.mysite.com/archives/russia-cuts-europe-gas.

21 голосов
/ 09 января 2009

С здесь .

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

20 голосов
/ 12 сентября 2014

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

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

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

Enter image description here

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

&

При хранении его в слаге, поданные результаты его в что такое слизень в django (см. URL этой страницы)

16 голосов
/ 09 января 2009

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

14 голосов
/ 31 октября 2016

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

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

Ex:

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

7 голосов
/ 21 января 2013

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

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

Как здесь:

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

    prepopulated_fields = {'slug': ('title', )}
1 голос
/ 14 августа 2018

пробковый

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

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

...