Django шаблони
Време е да покажем на екран малко данни! Django има вградени template tags за тази цел.
Какви са тези шаблонни етикети?
Виждате, в HTML не може наистина да пишете Python код, защото търсачките не го разбират. Те знаят само HTML. Знаем, че HTML е статичен, докато Python е по-динамичен.
Django template tags ни позволяват да прехвърлим Python нещата към HTML, така че да изграждаме динамични сайтове по-бързо. Супер!
Показване на шаблон за лист от публикации
В предишната глава дадохме на нашия шаблон лист от публикации с променливата posts
. Сега ще го покажем на екран с HTML.
За да отпечатаме променливата в шаблоните на Django, използваме къдрави скоби с името на променливата вътре ето така:
blog/templates/blog/post_list.html
{{ posts }}
Пробвайте това във вашия шаблон blog/templates/blog/post_list.html
. Отворете го в редактора си и заместете всичко от вторият <div>
до третият </div>
с {{ posts }}
. Запазете файла и опреснете страницата за да видите резултатите:
Както може да видите, всичко което имаме е това:
blog/templates/blog/post_list.html
<QuerySet [<Post: My second post>, <Post: My first post>]>
Това означава, че Django го разбира като лист от обекти. Помните ли от Въведение в Python как показваме листове? Да, с for цикли! При Django шаблоните ги правим така:
blog/templates/blog/post_list.html
{% for post in posts %}
{{ post }}
{% endfor %}
Пробвайте това във вашия шаблон.
Работи! Но ние искаме публикациите ни да се показват като статичните публикации, които създадохме по-рано в главата Въведение в HTML. Можете да смесвате HTML с шаблони. Нашето body
ще изглежда така:
blog/templates/blog/post_list.html
<div>
<h1><a href="/">Django Girls Blog</a></h1>
</div>
{% for post in posts %}
<div>
<p>published: {{ post.published_date }}</p>
<h2><a href="">{{ post.title }}</a></h2>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endfor %}
Всичко, което сложите между {% for %}
и {% endfor %}
ще се повтаря за всеки обект в листа. Опреснете страницата си:
Забелязахте ли, че този път използвахме малко по-различно означение ({{ post.title }}
или {{ post.text }}
)? Достъпваме данните във всяко едно поле дефинирано в нашия Post
модел. Също така |linebreaksbr
изпраща текста на публикациите през филтър и превръща в абзаци.
Още едно нещо
Ще е хубаво да видим дали уеб страницата ви работи в Internet, нали? Нека го прехвърлим отново на PythonAnywhere. Ето преглед на стъпките:
- Първо, изпратете кода си към GitHub
command-line
$ git status
[...]
$ git add --all .
$ git status
[...]
$ git commit -m "Modified templates to display posts from database."
[...]
$ git push
- След това влезте пак в PythonAnywhere акаунта си и отидете на Bash console (или стартирайте нова) и напишете командите:
PythonAnywhere command-line
$ cd <your-pythonanywhere-domain>.pythonanywhere.com
$ git pull
[...]
(Не забравяйте да заместите <your-pythonanywhere-domain>
с вашия актуален PythonAnywhere субдомейн, без скобите.)
- Накрая отидете на "Web" страница и натиснете Reload на вашата апликация. (За да достигнете други PythonAnywhere страници от конзолата, използвайте бутона от менюто в горния десен ъгъл.) Вашете обновление трябва да съществува на https://subdomain.pythonanywhere.com -- проверете в търсачката си! Ако публикациите на вашата PythonAnywhere страница не съвпадат с тези, които се появяват на локалния ви сървър, това е нормално. Базата от данни на локалния ви компютър не са синхронизирани с останалите ви файлове на PythonAnywhere.
Поздравления! Сега добавете нова публикация в администрацията на Django (помнете да добавите published_date!) Бъдете сигурни, че сте администрацията на Django на своята страница в pythonanywhere, https://subdomain.pythonanywhere.com/admin. След това презаредете страницата за да видите дали публикациите са налице.
Работи безупречно? Горди сме с теб! Сега отстъпи от компютъра си за малко – заслужи си почивка. :)