Co to jest „ślimak” w Django?

588

Kiedy czytam kod Django, często widzę w modelach to, co nazywa się „ślimakiem”. Nie jestem do końca pewien, co to jest, ale wiem, że ma to coś wspólnego z adresami URL. Jak i kiedy należy używać tego ślimaka?

(Przeczytałem jego definicję w tym glosariuszu ).

Jonas
źródło

Odpowiedzi:

752

„Slug” to sposób na wygenerowanie prawidłowego adresu URL, zwykle z wykorzystaniem już uzyskanych danych. Na przykład ślimak używa tytułu artykułu do wygenerowania adresu URL. Radzę wygenerować ślimak za pomocą funkcji, biorąc pod uwagę tytuł (lub inny fragment danych), zamiast ustawiać go ręcznie.

Przykład:

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

Teraz udawajmy, że mamy model Django, taki jak:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=40)

Jak odwołujesz się do tego obiektu za pomocą adresu URL i znaczącej nazwy? Możesz na przykład użyć Article.id, aby adres URL wyglądał następująco:

www.example.com/article/23

Lub możesz odwołać się do tytułu w ten sposób:

www.example.com/article/The 46 Year Old Virgin

Ponieważ spacje nie są poprawne w adresach URL, należy je zastąpić %20, co powoduje:

www.example.com/article/The%2046%20Year%20Old%20Virgin

Obie próby nie skutkują bardzo znaczącym, łatwym do odczytania adresem URL. To jest lepsze:

www.example.com/article/the-46-year-old-virgin

W tym przykładzie the-46-year-old-virginjest to ślimak: jest on tworzony z tytułu przez zmniejszenie wszystkich liter i zamianę spacji na łączniki -.

Zobacz także adres URL tej strony internetowej na inny przykład.

Josh Smeaton
źródło
72
Dobry opis, ale do dodania: SlugField nie zapewnia wyjątkowości po wyjęciu z pudełka, więc jeśli używasz go domyślnie, jest to lepszy adres URL: www.example.com/article/the-40-year-old-virgin/23 / Gdzie „23” to article.id i to, co faktycznie jest używane do wykonania zapytania (także szybciej niż zapytanie na ślimaku).
Daniel Naab
126
Uważam, że www.example.com/article/23/the-40-year-old-virgin jest łatwiejszy do odczytania.
MiniQuark
16
Jeśli podajesz treść na podstawie identyfikatora, zdecyduj, czy sprawdzić, czy ślimak pasuje do treści (i zwróć 404, jeśli nie), czy całkowicie go zignoruj. Nie sądzę, że istnieje ogólna zasada dotycząca tego, co najlepsze, pod względem SEO. SO nadal będzie wyświetlać tę stronę, jeśli wpiszesz stackoverflow.com/questions/427102/... w przeglądarce.
Tomas Andrle,
2
@Daniel Pamiętaj, że ślimak ukrywa również prawdziwy identyfikator bazy danych, więc twój przykład pokonuje jedną zaletę używania ślimaka.
Eno
15
@ Eno ślimak został dodany do SEO i dla bezpośredniego połączenia. Identyfikator służy do wyszukiwania indeksowanego. SEO dla stackoverflow jest genialne - i używają dokładnie tej strategii. Twój argument brzmiał: „ukryj identyfikator bazy danych”, który teraz zmieniłeś na „SEO”. Co jest grane?
Josh Smeaton
134

Jeśli mogę podać kontekst historyczny:

Termin „ślimak” odnosi się do odlewu metalu - w tym przypadku ołowiu - z którego wykonano czcionki prasowe. Na każdym papierze fabryka czcionek była regularnie ponownie topiona i przekształcana w świeże formy, ponieważ po wielu wydrukach zużyły się. Praktykanci tacy jak ja rozpoczęli tam swoją karierę i wspięli się na szczyt (już nie).

Typografy musiały komponować tekst artykułu w sposób odwrócony, z wiodącymi znakami ułożonymi w mądry sposób. Tak więc w czasie drukowania litery byłyby prosto na papierze. Wszystkie typografy potrafiły czytać gazety w odbiciu lustrzanym tak szybko, jak drukowane. Dlatego ślimaki (podobnie jak ślimaki), a także powolne historie (ostatnie do naprawienia), czekały na ławce wiele osób, które można było rozpoznać jedynie po ich literach, głównie cały tytuł był bardziej czytelny. Kilka „gorących” wiadomości czekało tam na ławce, na ewentualną korektę w ostatniej chwili (wieczór) przed ostatnim montażem i ostatecznym wydrukowaniem.

Django wyszedł z biura czasopisma Lawrence w Kansas. Tam gdzie prawdopodobnie wciąż trwa jakiś żargon drukarski. A-django-entuzjasta - i - przyjazny-stary-ślimak-chłopiec-z-Francji.

Praveen
źródło
61

Termin „ślimak” pochodzi od świata produkcji gazet.

To nieformalna nazwa nadana historii podczas procesu produkcyjnego. W miarę jak historia kręci się od reportera rytmicznego (zakładając, że w ogóle istnieją ?), Przez edytora, aż po „prasy drukarskie”, jest to nazwa, do której się odwołuje, np. „Czy naprawiłeś te błędy w” historia Kate-and-Williamiam? ”.

Niektóre systemy (takie jak Django) używają ślimaka jako części adresu URL do zlokalizowania historii, czego przykładem jest www.mysite.com/archives/kate-and-william.

Nawet przepełnienie stosu robi to samo, z GEB-ish (a) samo-referencyjnym /programming/427102/what-is-a-slug-in-django/427201#427201, chociaż możesz zastąpić ślimak blahblahi nadal będzie to w porządku.

Może nawet datować się wcześniej, ponieważ scenariusze miały na początku każdej sceny „slug linie”, co zasadniczo stanowi tło dla tej sceny (gdzie, kiedy i tak dalej). Jest bardzo podobny, ponieważ jest zapowiedzią lub preambułą tego, co następuje.

Na maszynie linotypowej ślimak był kawałkiem metalu o jednym wierszu, który został utworzony z pojedynczych liter. Dzięki jednemu ślimakowi dla całej linii znacznie poprawiło to stare komponowanie postaci po znaku.

Chociaż poniższe przypuszczenia są czystą hipotezą, wczesne znaczenie ślimaka dotyczyło sfałszowanej monety (którą należałoby jakoś nacisnąć). Mogłem sobie wyobrazić, że to użycie zostanie przekształcone w termin drukowany (ponieważ ślimak musiał być tłoczony przy użyciu oryginalnych znaków), a stamtąd zmieniłbym definicję „kawałka metalu” na definicję „podsumowania historii”. Stamtąd jest krótki krok od właściwego drukowania do świata online.


(a) „Godel Escher, Bach” autorstwa Douglasa Hofstadtera , który (przynajmniej) uważam za jedno z wielkich współczesnych dzieł intelektualnych. Powinieneś także sprawdzić jego inne dzieło „Metamagical Themas”.

paxdiablo
źródło
29

Slug to termin z gazety. Ślimak to krótka etykieta na coś, zawierająca tylko litery, cyfry, podkreślenia lub łączniki. Są one zwykle używane w adresach URL. (jak w dokumentach Django)

Pole informacji o pracy w Django służy do przechowywania i generowania prawidłowych adresów URL dla tworzonych dynamicznie stron internetowych.

Podobnie jak sposób dodania tego pytania do Przepełnienia stosu i wygenerowania strony dynamicznej, a kiedy zobaczysz w pasku adresu, zobaczysz tytuł pytania z „-” zamiast spacji. To jest dokładnie praca w polu ślimaków.

Wpisz opis zdjęcia tutaj

Podany przez ciebie tytuł był mniej więcej taki -> Co to jest „ślimak” w Django?

Po zapisaniu w polu ślimaka staje się „what-is-a-slug-in-django” (patrz URL tej strony)

Manjit Kumar
źródło
27

Od tutaj .

„Slug” to termin używany w gazecie, ale to, co tutaj oznacza, to ostatni fragment adresu URL. Na przykład post z tytułem „Trochę o Django” stałby się automatycznie „trochę o Django” (możesz oczywiście go łatwo zmienić, jeśli nie podoba ci się automatycznie wygenerowany ślimak).

BobbyShaftoe
źródło
18

Jest to opisowa część adresu URL, która ma na celu uczynienie go bardziej ludzkim, ale niekoniecznie wymagany przez serwer WWW - w Co to jest „ślimak” w Django? jest to „in-django-what-is-a-slug”, ale nie jest on używany do określenia wyświetlanej strony (przynajmniej na tej stronie)

Cebjyre
źródło
17

Slug to przyjazna dla adresu URL krótka etykieta dla określonej zawartości. Zawiera tylko litery, cyfry, znaki podkreślenia lub łączniki. Kule są zwykle zapisywane z odpowiednią zawartością i są przekazywane jako ciąg adresu URL.

Slug można tworzyć za pomocą SlugField

Dawny:

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

Jeśli chcesz użyć tytułu jako ślimaka, django ma prostą funkcję o nazwie slugify

from django.template.defaultfilters import slugify

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

    def slug(self):
        return slugify(self.title)

Jeśli potrzebuje wyjątkowości, dodaj unique=Truew polu ślimaka.

na przykład z poprzedniego przykładu:

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

Czy jesteś leniwy, aby wykonać proces ślimak? nie martw się, ta wtyczka ci pomoże. django-autoslug

Simplans
źródło
8

Również auto ślimak na django-admin. Dodano w ModelAdmin:

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

Jak tutaj:

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

    prepopulated_fields = {'slug': ('title', )}
Alexey Kuzmin
źródło