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

337

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

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

Теги:
django-models
slug

8 ответов

450
Лучший ответ

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

Пример:

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

  • 49
    Хорошее описание, но добавим: SlugField не обеспечивает уникальность «из коробки», поэтому, если вы используете его по умолчанию, это лучший URL: www.example.com/article/the-40-year-old-virgin/23 / Где '23' - это article.id и то, что фактически используется для выполнения запроса (также быстрее, чем запросы к слагу).
  • 104
    Я считаю, что www.example.com/article/23/the-40-year-old-virgin легче читать.
Показать ещё 9 комментариев
73

Могу ли я завершить это:

Термин "slug" имеет отношение к литью металла, свинца, в этом случае, из которого были сделаны пресс-шрифты. Каждая Бумага имела свои шрифты factory, регулярно, повторно расплавленную и переработанную в свежих формах. Потому что после многих отпечатков они были изношены. Ученик, как я, начал свою карьеру там, и весь путь к вершине. (Не больше)

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

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

  • 2
    Спасибо за этимологию!
42

Как немного истории, термин "слизняк" происходит из мира редакции газет.

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

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

15

Из здесь.

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

14

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

13

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

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

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

Изображение 912

Название, введенное вами, было чем-то вроде этого → Что такое "slug" в Django?

&

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

5

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

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

Пример:

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

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

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

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

Вы ленитесь, чтобы сделать процесс слизи? не волнуйтесь, этот плагин поможет вам. django-autoslug

5

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

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

Как здесь:

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

    prepopulated_fields = {'slug': ('title', )}
Сообщество Overcoder
Наверх
Меню