Що таке "кулі" у Джанго?


588

Коли я читаю код Джанго, я часто бачу в моделях те, що називається "слизом". Я не зовсім впевнений, що це, але я знаю, що це має щось спільне з URL-адресами. Як і коли слід використовувати цю штукатурку?

(Я прочитав його визначення в цьому словнику .)

Відповіді:


752

"Сліз" - це спосіб генерувати дійсну URL-адресу, як правило, використовуючи вже отримані дані. Наприклад, слизька використовує заголовок статті для створення URL-адреси. Я раджу генерувати слизи за допомогою функції, задавши заголовок (або інший фрагмент даних), а не встановлювати його вручну.

Приклад:

<title> The 46 Year Old Virgin </title>
<content> A silly comedy movie </content>
<slug> the-46-year-old-virgin </slug>

Тепер зробимо вигляд, що у нас є модель Джанго на зразок:

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-мудро. Так все одно відображатиметься ця сторінка, якщо ви введете stackoverflow.com/questions/427102/… у своєму браузері.
Томаш Андрле

2
@Daniel Просто пам’ятайте, що слизька також приховує реальний ідентифікатор бази даних, тому ваш приклад перемагає одну перевагу використання слимака.
Ено

15
@Eno ковпак додається для SEO та для постійної посилання nicey-ness. Ідентифікатор використовується для індексованого пошуку. SEO для stackoverflow є геніальним - і вони використовують саме цю стратегію. Вашим аргументом було "сховати ідентифікатор бази даних", який ви тепер перейшли до "SEO". Що йде?
Джош Смітон

134

Якщо я можу надати певний історичний контекст:

Термін "слизька" має відношення до лиття металу - в даному випадку свинцю, з якого виготовлялися шрифти для преси. Кожен папір тоді регулярно переплавляв та переробляв у свіжі форми, оскільки після багатьох відбитків вони зношувались. Учні, як я, розпочали там свою кар’єру і пройшли всю вершину (вже не).

Друкарні повинні були скласти текст статті у зворотному порядку з провідними символами, складеними мудро. Тож під час друку букви були б прямо на папері. Усі друкарні могли читати газету, яка відображалася так само швидко, як і друкована. Тому слимаків (як слимаків) і повільних оповідань (останніх виправляли) багато хто на лавці чекав, ідентифікували лише їхні кулакові листи, в основному цілі заголовки, як правило, більш читабельні. Деякі "гарячі" новини чекали там, на лавці, для можливої ​​корекції в останню хвилину (Вечірній папір) перед останньою збіркою та остаточного друку.

Джанго вийшов з офісів журналу «Лоуренс» у штаті Канзас. Де, мабуть, якийсь друкарський жаргон все ще затримується Ентузіаст-джанго - & - доброзичливий-старий-слимак-хлопчик з Франції.


61

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

Це неофіційна назва, дана історії в процесі виробництва. Оскільки історія прокручує шлях від репортера (якщо припустити, що вони вже існують ?) Аж до редактора до "друкарських верстатів", на це ім'я посилається, наприклад, "Ви виправили ці помилки в" історія Кейт і Вілліам? ".

Деякі системи (наприклад, Django) використовують слизу як частину URL-адреси, щоб знайти історію www.mysite.com/archives/kate-and-william.

Навіть сам переповнення стека робить це за допомогою самореференції GEB-ish (a)/programming/427102/what-is-a-slug-in-django/427201#427201 , хоча ви можете замінити шлака, blahblahі це все одно буде гаразд.

Він може навіть датуватися раніше, оскільки сценарії мали "кулі лінії" на початку кожної сцени, що в основному задає фон для цієї сцени (де, коли і так далі). Це дуже схоже на те, що це точна або преамбула того, що випливає.

На машині Linotype кухоль представляв собою металевий шматок, який створювався з окремих літерних форм. Зробивши єдиного кулі для цілого рядка, це значно покращилося на старому складі символів за символом.

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


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


29

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

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

Подібно до того, як ви додали це запитання до переповнення стека та була створена динамічна сторінка, і коли ви побачите в адресному рядку, ви побачите заголовок запитання замість пробілів "-". Ось саме робота поля слимаків.

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

Назва, яку ви ввели, була приблизно такою -> Що таке "кулі" у Джанго?

Зберігаючи його в полі слиз, він стає "що-є-що-слуг-в-джанго" (див. URL-адресу цієї сторінки)


27

Від сюди .

«Слуг» - це газетний термін, але що тут означає остаточний біт URL-адреси. Наприклад, публікація з заголовком "Трохи про Джанго" автоматично перетвориться на "біт-про-джанго" (ви, звичайно, можете легко змінити її, якщо вам не сподобається автоматично створений слизь).


18

Це описова частина URL-адреси, яка є для того, щоб зробити її більш людською описовою, але не обов'язково вимагати її веб-сервер - у Що таке "кулі" у Django? Слуг - це "in-django-what-is-a-slug", але pug не використовується для визначення сторінки, що подається (принаймні на цьому сайті)


17

Slug - це зручна для URL-адрес коротка мітка для конкретного вмісту. Він містить лише букви, цифри, підкреслення або дефіси. Слуги зазвичай зберігаються з відповідним вмістом і передаються у вигляді рядка URL.

Слуг можна створити за допомогою 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 в поле слиз.

наприклад, з попереднього прикладу:

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

Ви ледачі займатися процесом слима? не хвилюйтесь, цей плагін вам допоможе. джанго-автолюг


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/ останній шматочок (весна) - це слимак.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.