חלקי תבנית
חלק מהיחידה ממשקי API של JSON במסלול ה-Django של Coddy. שיעור 14 מתוך 19.
סקריפט לא תמיד זקוק ל-JSON. אחרי הוספת משימה, הוא עשוי לבקש מהשרת את רכיב ה-<li> המוכן של אותה משימה ולהוסיף אותו לרשימה. תבנית כבר מציגה את השורה הזאת, ולכן השרת צריך להשתמש בה שוב.
Django 6.0 הוסיף חלקי תבנית: קטע בעל שם מתוך תבנית שאפשר גם לרנדר לבדו. עוטפים אותו ב-{% partialdef name %} וב-{% endpartialdef %}; עם המילה inline הוא גם מוצג במקומו, פעם אחת עבור כל פריט בלולאה. תצוגה מרנדרת רק את הקטע לפי שם התבנית, # ושם החלק:
{% partialdef cart-total inline %}
<strong>{{ cart.total }}</strong>
{% endpartialdef %}return render(request, "shop/cart.html#cart-total", {"cart": cart})ההקשר חייב להכיל את מה שהקטע קורא, במקרה הזה cart. הדף והקטע משתמשים באותו סימון, ולכן הם לא יכולים לסטות זה מזה.
אתגר
בינוניהצג שורה אחת בלבד מתוך הדף החדש /tasks/.
- בקובץ
tasks/list.html, הפוך את<li>שבלולאה לחלקי מסוגinlineבשםtask-row, כדי ש-/tasks/עדיין יציג כל שורה. - בקובץ
tasks/views.py, הוסף אתtask_row(request, pk): הצג רק את החלקי הזה, תוך העברתtask, או את דף 404 של Django. - בקובץ
tasks/urls.py, הוסף את"tasks/<int:pk>/row/"בשםtask_row.
פתח את /tasks/3/row/: רק Call the bank (done), ללא כותרת.
נסו בעצמכם
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>All tasks</title>
</head>
<body>
<h1>All tasks</h1>
<ul id="tasks">
{% for task in tasks %}
<li id="task-{{ task.id }}">{{ task.title }}{% if task.done %} (done){% endif %}</li>
{% endfor %}
</ul>
</body>
</html>
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה ממשקי API של JSON
תרגלו בעצמכם: Django אונליין