Nemusíte se obtěžovat vytvářením slimáků v Django. Implementujte automatické generování slimáků, abyste ušetřili čas a zefektivnili svůj pracovní postup.

Jako webový vývojář je optimalizace uživatelského dojmu vaší webové aplikace zásadní. Chcete-li zlepšit uživatelskou zkušenost a viditelnost vyhledávače, používejte v Django uživatelsky přívětivé adresy URL se slugs. Vytváření adres URL pomocí slugs je stejně snadné jako psaní funkce, což vám umožňuje generovat stručné a popisné adresy URL, které jsou snadno srozumitelné pro uživatele a vyhledávače. To zlepšuje použitelnost a dostupnost a zároveň zvyšuje hodnocení vyhledávačů.

Příklady kódu použité v tomto článku naleznete v tomto úložiště GitHub.

Vytvoření projektu Django

Django poskytuje několik metod pro generování slimáků a jejich použití na vašem webu. Abychom ilustrovali různé způsoby implementace slimáků, tento tutoriál vás provede vytvořením jednoduché webové aplikace pro blog.

Před nastavením projektu Django vytvořit a aktivovat virtuální prostředí

instagram viewer
k instalaci potřebných závislostí. Po aktivaci virtuálního prostředí nastavte svůj projekt podle následujících kroků:

  • Nainstalujte Django pomocí příkazu pip v příkazovém řádku:
pip nainstalovat django
  • Vytvořte projekt pomocí django-admin utility. Tento tutoriál použije project_core jako název projektu.
django-admin startproject project_core .
  • Vytvořte aplikaci s názvem recepty.
recepty python manage.py startapp
  • Přidejte svou aplikaci k nainstalovaným aplikacím ve vašem projektu nastavení.py soubor.
INSTALLED_APPS = [
'...'
'recepty',
]
  • Spusťte aplikaci zadáním následujícího příkazu do nástroje příkazového řádku:
runserver python manage.py
  • Navigovat do http://127.0.0.1:8000/ ve vašem prohlížeči. Měli byste vidět tuto stránku:
  • Nakonfigurujte vzor adresy URL ve svém projektu urls.py soubor
z django.urls import cestu, zahrnout

urlpatterns = [
'...',
cesta('', zahrnout('recipes.urls'))
]

Vytvoření slimáka v Django

Chcete-li vygenerovat slimáka v Django, musíte do svých modelů zahrnout pole slug. Postupujte podle těchto kroků a vytvořte slimáka v Django.

Vytvořte model

Ve vašem modely.py vytvořte nový model a zahrňte pole slimáků. Zde je příklad:

třídaRecept(modely. Modelka):
jméno = modely. CharField (max_length=225, prázdné =Nepravdivé, null=Nepravdivé)
přísady = modely. TextField (prázdné=Nepravdivé, null=Nepravdivé)
návod = modely. TextField (prázdné=Nepravdivé, null=Nepravdivé)
date_created = modely. DateTimeField (auto_now=Skutečný)
slimák = modely. SlugField (null = Skutečný, prázdné =Skutečný, jedinečný=Skutečný)

Ve výše uvedeném příkladu model Recept obsahuje pole s názvem slimák. The slimák pole má atributy, nula a prázdný nastaven na Skutečný.

Použijte migrace na svůj model

Po vytvoření modelu byste měli v nástroji příkazového řádku spustit následující příkaz, abyste vytvořili tabulku v databázi:

python manage.py makemigrations && python manage.py migrate

Výše uvedený příkaz nejprve vygeneruje soubor migrace a poté aktualizuje databázi provedením pokynů v souboru migrace.

Přidejte data do své databáze

Zaregistrujte svůj model zadáním následujícího admin.py soubor:

z django.contrib import admin
z .modely import Recept

admin.site.register (recept)

Dále otevřete nástroj příkazového řádku a vytvořte a superuživatel pro váš administrátorský panel spuštěním tohoto příkazu:

python manage.py vytváříuperuser

Výše uvedený příkaz vás provede kroky znázorněnými na tomto obrázku:

Po vytvoření a superuživatel, spusťte svůj lokální server pomocí následujícího příkazu:

runserver python manage.py

Jakmile se váš server spustí, měli byste přejít na http://127.0.0.1:8000/admin/, přihlaste se pomocí údajů, které jste použili k vytvoření a superuživatela ručně přidat některé recepty do databáze. Měli byste věnovat pozornost poli slimáků.

Vytvořte zobrazení pro svou aplikaci

Otevři tvůj views.py a vytvořte pro svou aplikaci dvě zobrazení. První zobrazení jednoduše zobrazí přehled vašich receptů, zatímco druhé zobrazí více podrobností o každém receptu. Ve svém projektu můžete použít tato zobrazení:

z django.zkratky import render, get_object_or_404
z .modely import Recept

# Zobrazení seznamu receptů
defrecept_list(žádost):
recepty = Recipe.objects.all()
vrátit se vykreslit (žádost, 'recipes/recipe_list.html', {"recepty":recepty})

# Detailní pohled na každý recept
defrecept_detail(žádost, recept_slug):
recept = get_object_or_404(recept, slimák=recipe_slug)
vrátit se vykreslit (žádost, 'recipes/recipe_detail.html', {'recept': recept})

Ve výše uvedeném úryvku kódu je recept_list view vrátí seznam všech receptů do šablony. Na druhou stranu, recept_detail view vrátí do šablony jeden recept. Tento pohled zahrnuje další parametr nazvaný recept_slug který se používá k získání slimáka pro konkrétní recept.

Nakonfigurujte vzory adres URL pro svá zobrazení

V adresáři aplikace (nebo recept složka), vytvořte soubor s názvem urls.py přidat cesty URL pro vaši aplikaci. Zde je příklad:

z django.urls import cesta
z .zobrazení import recept_list, recept_detail

urlpatterns = [
cesta('', seznam_receptů, název='recept-home'),
cesta('recept//', recept_detail, název='recipe_detail'),
]

Ve výše uvedeném fragmentu kódu druhá cesta zavádí slimák do adresy URL stránky.

Vytvářejte šablony pro svou aplikaci

Chcete-li zobrazit receptury v prohlížeči, vytvořte šablony pro své pohledy. Jedna šablona by měla být pro recept_list pohled, zatímco druhý by měl být pro recept_detail Pohled. Chcete-li použít slimák ve své šabloně, postupujte podle tohoto formátu, {% url 'view_name' recept.slug %}. Zde jsou dva příklady, které můžete použít ve svém kódu:

 recepty/seznam_receptů.html 
{% extends 'base.html' %}

{% block content %}
<h1třída="my-5 text-center">Receptyh1>
<centrum>
<ultřída="list-group w-75">
{% pro recept v receptech %}
<litřída="list-group-item my-3">
<h2třída="mb-3">
<Ahref="{% url 'recipe_detail' recept.slug %}">
{{recept.název }}
A>
h2>
<ptřída="w-50">
Ingredience: {{ recept.ingredience }}
p>
<ptřída="text ztlumený">
Vytvořeno: {{ recipe.date_created }}
p>
li>
{% prázdné %}
<litřída="list-group-item">Nebyly nalezeny žádné recepty.li>
{% endfor %}
ul>
centrum>
{% endblock %}

Výše uvedená HTML šablona vypíše a zobrazí všechny recepty ve vaší databázi Nebyly nalezeny žádné recepty pokud nejsou recepty. Pro styling používá třídy Bootstrap. Můžete se naučit, jak na to použijte Bootstrap s Django. Výše uvedená šablona by měla v prohlížeči vypadat takto:

 recepty/recipe_detail.html 
{% extends 'base.html' %}

{% block content %}
<centrum>
<divtřída="w-75">
<h1třída="mt-5 mb-4">{{recept.název }}h1>
<h3>Ingredienceh3>
<p>{{ recept.ingredience }}p>
<h3>Instrukceh3>
<p>{{ recept.pokyny }}p>
<ptřída="text ztlumený">Vytvořeno: {{ recipe.date_created }}p>
div>
centrum>
{% endblock %}

Výše uvedená HTML šablona vrací podrobnosti o konkrétním receptu. V prohlížeči by výše uvedená stránka měla vypadat takto:

Všimnete si, že adresa URL nyní obsahuje jakýkoli slimák, který jste přidali do databáze pro každý recept. Pokud nerozumíte tomu, jak systém šablon funguje, měli byste se to nejprve naučit dědění šablony v Django a Django's MVT architektura.

Automaticky vygenerujte slimáka v Django

U slimáků to, co opravdu chcete, je automaticky je generovat na základě pole ve vašem modelu. Chcete-li to provést, musíte upravit Uložit() ve vašem modelu a před uložením objektů do databáze zadejte svá vlastní pravidla. Zde je jednoduchý příklad, který můžete přidat do třídy modelu:

# import slugify
z django.template.defaultfilters import slugovat

defUložit(self, *args, **kwargs):
-line self.slug:
self.slug = slugify (vlastní jméno)
super().save(*args, **kwargs)

Výše uvedená funkce nejprve zkontroluje, zda pro objekt modelu existuje slug. Pokud není žádný slimák, použije se slugovat funkci vygenerovat z pole názvu v modelu. Po přepsání Uložit() metodu, otevřete panel administrátora a přidejte nějaké recepty. Tentokrát nemusíte pole slimák vyplňovat, protože se automaticky vyplní, jakmile uložíte svůj recept.

Pokud přejdete na stránku podrobností svého nově přidaného receptu, uvidíte, že adresa URL používá jako slimák název receptu.

Někdy budete mít více receptů se stejným názvem a to způsobí chyby ve vašem slimáku. Můžete to opravit přidáním jedinečného prvku do svého slimáka, jako je datum vytvoření. Zde je jednoduchý příklad:

self.slug = slugify (vlastní jméno + "-" + str (self.date_created))

Použijte Slugs k vylepšení URL

Na rozdíl od starých dobrých pkslugs poskytují mnoho výhod včetně flexibility a přenositelnosti, protože nejsou vázány na konkrétní identifikátory URL, jako je primární klíč. Pokud tedy změníte strukturu databáze nebo migrujete svá data, můžete stále udržovat konzistentní adresy URL. Slimáci také zvyšují přívětivost pro SEO.