אתה לא צריך להתעסק כדי ליצור שבלולים ב-Django. הטמע יצירה אוטומטית של שבלולים כדי לחסוך זמן ולייעל את זרימת העבודה שלך.

כמפתח אינטרנט, אופטימיזציה של חווית המשתמש של אפליקציית האינטרנט שלך היא חיונית. כדי לשפר את חווית המשתמש ואת הנראות במנועי החיפוש, השתמש בכתובות URL ידידותיות למשתמש עם שבלולים ב-Django. יצירת כתובות URL עם שבלולים היא קלה כמו כתיבת פונקציה, ומאפשרת לך ליצור כתובות URL תמציתית ותיאורית שקל למשתמשים ולמנועי חיפוש להבין. זה משפר את השימושיות והנגישות תוך שיפור הדירוג במנועי החיפוש.

ניתן למצוא את דוגמאות הקוד המשמשות במאמר זה מאגר GitHub.

יצירת פרויקט ג'נגו

Django מספקת מספר שיטות ליצירת שבלולים ושימוש בהם באתר האינטרנט שלך. כדי להמחיש דרכים שונות ליישם שבלולים, מדריך זה ידריך אותך בבניית יישום אינטרנט פשוט לבלוג.

לפני הקמת פרויקט Django, ליצור ולהפעיל סביבה וירטואלית כדי להתקין את התלות הנדרשת. לאחר הפעלת הסביבה הוירטואלית שלך, בצע את השלבים הבאים כדי להגדיר את הפרויקט שלך:

  • התקן את Django באמצעות פקודת pip בשורת הפקודה שלך:
התקנת pip django
  • צור פרויקט באמצעות ה django-admin תוֹעֶלֶת. הדרכה זו תשתמש ליבת_פרויקט כשם הפרויקט.
instagram viewer
django-admin startproject project_core .
  • צור אפליקציה בשם מתכונים.
מתכוני python manage.py startapp
  • הוסף את האפליקציה שלך לאפליקציות המותקנות בפרויקט שלך setting.py קוֹבֶץ.
INSTALLED_APPS = [
'...'
'מתכונים',
]
  • הפעל את היישום שלך על ידי הקלדת הפקודה הבאה בכלי שורת הפקודה שלך:
שרת python manage.py
  • נווט אל http://127.0.0.1:8000/ בדפדפן שלך. אתה אמור לראות את הדף הזה:
  • הגדר את דפוס כתובת האתר בפרויקט שלך urls.py קוֹבֶץ
מ django.urls יְבוּא נתיב, כולל

urlpatterns = [
'...',
נָתִיב('', כולל('recipes.urls'))
]

יצירת שבלול בג'נגו

כדי ליצור שבלול ב-Django, עליך לכלול שדה שבלול בדגמים שלך. בצע את השלבים הבאים כדי ליצור שבלול ב-Django.

צור דגם

אצלך models.py קובץ, צור מודל חדש וכלול שדה שבלול. הנה דוגמה:

מעמדמתכון(דגמים. דֶגֶם):
שם = דגמים. CharField (max_length=225, ריק=שֶׁקֶר, null=שֶׁקֶר)
מרכיבים = דגמים. TextField (ריק=שֶׁקֶר, null=שֶׁקֶר)
הוראות = דגמים. TextField (ריק=שֶׁקֶר, null=שֶׁקֶר)
date_created = מודלים. DateTimeField (auto_now=נָכוֹן)
שבלול = דגמים. SlugField (null = נָכוֹן, ריק=נָכוֹן, ייחודי=נָכוֹן)

בדוגמה לעיל, המודל מתכון מכיל שדה בשם שבלול. ה שבלול לשדה יש ​​את התכונות, ריק ו רֵיק מכוון ל נָכוֹן.

החל העברות על המודל שלך

לאחר יצירת מודל, עליך להפעיל את הפקודה הבאה בכלי שורת הפקודה שלך כדי ליצור את הטבלה במסד הנתונים שלך:

python manage.py העברת python manage.py && python manage.py

הפקודה לעיל תיצור תחילה קובץ הגירה ולאחר מכן תעדכן את מסד הנתונים על ידי ביצוע ההוראות בתוך קובץ ההעברה.

הוסף נתונים למסד הנתונים שלך

רשום את הדגם שלך על ידי הקלדת הפרטים הבאים שלך admin.py קוֹבֶץ:

מ django.contrib יְבוּא אדמין
מ .מודלים יְבוּא מתכון

admin.site.register (מתכון)

לאחר מכן, פתח את כלי שורת הפקודה שלך וצור א משתמש-על עבור פאנל הניהול שלך על ידי הפעלת הפקודה הזו:

python manage.py createsuperuser

הפקודה לעיל תעביר אותך דרך השלבים המתוארים בתמונה זו:

לאחר יצירת א משתמש-על, הפעל את השרת המקומי שלך עם הפקודה הבאה:

שרת python manage.py

ברגע שהשרת שלך מופעל, עליך לנווט אל http://127.0.0.1:8000/admin/, היכנס עם הפרטים שבהם השתמשת ליצירת א משתמש-על, ולהוסיף ידנית כמה מתכונים למסד הנתונים שלך. כדאי לשים לב לשדה הקליעה.

צור תצוגות עבור האפליקציה שלך

פתח את views.py קובץ וצור שתי תצוגות עבור האפליקציה שלך. התצוגה הראשונה פשוט תציג סקירה כללית של המתכונים שלך בעוד שהשנייה תספק פרטים נוספים על כל מתכון. אתה יכול להשתמש בתצוגות אלה בפרויקט שלך:

מ django.shortcuts יְבוּא render, get_object_or_404
מ .מודלים יְבוּא מתכון

# תצוגת רשימה למתכונים
defרשימת_מתכונים(בַּקָשָׁה):
recipes = Recipe.objects.all()
לַחֲזוֹר render (בקשה, 'recipes/recipe_list.html', {"מתכונים":מתכונים})

# תצוגה מפורטת עבור כל מתכון
defמתכון_פרט(בקשה, recipe_slug):
מתכון = get_object_or_404(מתכון, slug=recipe_slug)
לַחֲזוֹר render (בקשה, 'recipes/recipe_detail.html', {'מתכון': מתכון})

בקטע הקוד שלמעלה, ה- רשימת_מתכונים view מחזירה את רשימת כל המתכונים לתבנית. מצד שני, ה מתכון_פרט התצוגה מחזירה מתכון בודד לתבנית. תצוגה זו מקבלת פרמטר נוסף שנקרא recipe_slug אשר משמש כדי לקבל את הקליע עבור מתכון ספציפי.

הגדר דפוסי כתובות אתרים עבור התצוגות שלך

בספריית האפליקציה שלך (או מתכון תיקיה), צור קובץ בשם urls.py כדי להוסיף נתיבי כתובת אתר עבור האפליקציה שלך. הנה דוגמא:

מ django.urls יְבוּא נָתִיב
מ .צפיות יְבוּא מתכון_רשימת, מתכון_פרט

urlpatterns = [
נָתִיב('', recipe_list, name='מתכונים-בית'),
נָתִיב('מתכון//', recipe_detail, name='recipe_detail'),
]

בקטע הקוד שלמעלה, הנתיב השני מציג את הקליעה לכתובת ה-URL של הדף.

צור תבניות עבור האפליקציה שלך

כדי להציג את המתכונים בדפדפן, צור תבניות עבור התצוגות שלך. תבנית אחת צריכה להיות עבור רשימת_מתכונים להציג בעוד שהשני צריך להיות עבור מתכון_פרט נוף. כדי להשתמש בסלאג בתבנית שלך, עקוב אחר הפורמט הזה, {% url 'view_name' recipe.slug %}. להלן שתי דוגמאות שתוכל להשתמש בקוד שלך:

 recipes/recipe_list.html 
{% מרחיב את 'base.html' %}

{% block content %}
<h1מעמד="מרכז הטקסט שלי-5">מתכוניםh1>
<מֶרְכָּז>
<ulמעמד="list-group w-75">
{% למתכון במתכונים %}
<לימעמד="list-group-item my-3">
<h2מעמד="mb-3">
<אhref="{% url 'recipe_detail' recipe.slug %}">
{{ recipe.name }}
א>
h2>
<עמעמד="w-50">
מרכיבים: {{ recipe.ingredients }}
ע>
<עמעמד="מושתק טקסט">
נוצר: {{ recipe.date_created }}
ע>
לי>
{% ריק %}
<לימעמד="פריט-קבוצה-רשימה">לא נמצאו מתכונים.לי>
{% endfor %}
ul>
מֶרְכָּז>
{% endblock %}

תבנית ה-HTML שלמעלה תפרט את כל המתכונים במסד הנתונים שלך ותציג לא נמצאו מתכונים אם אין מתכונים. הוא משתמש בשיעורי Bootstrap לסטיילינג. אתה יכול ללמוד איך לעשות השתמש ב-Bootstrap עם Django. התבנית שלמעלה צריכה להיראות כך בדפדפן:

 recipes/recipe_detail.html 
{% מרחיב את 'base.html' %}

{% block content %}
<מֶרְכָּז>
<divמעמד="w-75">
<h1מעמד="mt-5 mb-4">{{ recipe.name }}h1>
<h3>רכיביםh3>
<ע>{{ recipe.ingredients }}ע>
<h3>הוראותh3>
<ע>{{ recipe.instructions }}ע>
<עמעמד="מושתק טקסט">נוצר: {{ recipe.date_created }}ע>
div>
מֶרְכָּז>
{% endblock %}

תבנית ה-HTML למעלה מחזירה פרטים על מתכון ספציפי. בדפדפן, העמוד שלמעלה אמור להיראות כך:

אתה תבחין שכתובת האתר מכילה כעת כל שבלול שהוספת במסד הנתונים שלך עבור כל מתכון. אם אינך מבין כיצד פועלת מערכת התבניות, תחילה עליך ללמוד ירושת תבנית ב-Django ו ארכיטקטורת ה-MVT של ג'נגו.

צור שבלול באופן אוטומטי ב-Django

עם שבלולים, מה שאתה באמת רוצה הוא ליצור אותם אוטומטית על סמך שדה במודל שלך. כדי לעשות זאת, עליך לשנות את ה להציל() שיטה במודל שלך וציין כללים משלך לפני שמירת אובייקטים במסד הנתונים. הנה דוגמה פשוטה שתוכל להוסיף לכיתה המודל שלך:

# ייבוא ​​slugify
מ django.template.defaultfilters יְבוּא להצניע

defלהציל(עצמי, *args, **kwargs):
אםלֹא self.slug:
self.slug = slugify (self.name)
super().save(*args, **kwargs)

הפונקציה שלמעלה בודקת תחילה אם קיים שבלול עבור אובייקט הדגם. אם אין שבלול, הוא משתמש ב- להצניע פונקציה כדי ליצור אחד משדה השם במודל. לאחר דריסה של להציל() שיטה, פתח את לוח הניהול שלך והוסף כמה מתכונים. הפעם, אינך צריך למלא את שדה הקליעה כי הוא יאוכלס אוטומטית ברגע שתשמור את המתכון שלך.

אם תנווט לדף הפרטים של המתכון החדש שהוספת, תראה שכתובת האתר משתמשת בשם המתכון בתור הקליעה.

לפעמים, יהיו לך מספר מתכונים עם אותו שם וזה יגרום לשגיאות בשבלול שלך. אתה יכול לתקן את זה על ידי הוספת אלמנט ייחודי לשבלול שלך כמו תאריך היצירה. הנה דוגמה פשוטה:

self.slug = slugify (self.name + "-" + str (self.date_created))

השתמש בשבלולים כדי לשפר את חוויית כתובת האתר

בניגוד לישן והטוב pk, שבלולים מספקים יתרונות רבים, כולל גמישות וניידות מכיוון שהם אינם קשורים למזהי כתובת URL ספציפיים כגון המפתח הראשי. לכן, אם תשנה את מבנה מסד הנתונים שלך או תעביר את הנתונים שלך, אתה עדיין יכול לשמור על כתובות URL עקביות. שבלולים גם משפרים את הידידותיות לקידום אתרים.