Django шаблони

Час вивести деякі дані! Django надає нам певні допоміжні, вбудовані шаблонні теги для цього.

Що таке шаблонні теги?

Як бачите, в HTML, ви не можете помістити Python код, тому що браузери не зрозуміють його. Вони знають лише HTML. Ми знаємо, що HTML більшою мірою є статичною, в той час як Python є більш динамічною мовою.

Шаблонні теги Django дозволяють нам передавати Python-подібні речі в HTML, таким чином можна розробляти динамічні веб-сайти швидше і простіше. Ой!

Шаблон для виведення списку постів

В попередньому розділі ми надали нашому шаблону список постів у змінній posts. А тепер відобразимо це в HTML.

Щоб надрукувати змінну в Django шаблоні, ми використовуємо подвійні фігурні дужки з іменем змінної всередині:

{{ posts }}

Спробуйте це в шаблоні blog/templates/blog/post_list.html. Починаючи з другого <div> до третього </div> замініть все на {{ posts }}. Збережіть файл і оновіть сторінку, щоб побачити результат:

Рисунок 13.1

Як можна побачити, все що ми отримали, це:

<QuerySet [<Post: My second post>, <Post: My first post>]>

Означає, що Django розуміє це як список об'єктів. Пам'ятаєте із розділу Вступ до Python як ми можемо виводити списки? Звичайно, за допомогою циклу for! У Django шаблонах ви можете створити їх наступним чином:

{% for post in posts %}
    {{ post }}
{% endfor %}

Спробуйте це у вашому шаблоні.

Рисунок 13.2

Працює! Однак, бажано, щоб вони були виведені як статичні пости, які ми створили раніше у розділі Вступ до HTML. Ви можете компонувати теги HTML і шаблонні теги. Наша частина body буде виглядати так:

<div>
    <h1><a href="/">Django Girls Blog</a></h1>
</div>

{% for post in posts %}
    <div>
        <p>published: {{ post.published_date }}</p>
        <h1><a href="">{{ post.title }}</a></h1>
        <p>{{ post.text|linebreaksbr }}</p>
    </div>
{% endfor %}

Все, що ви напишете між {% for %} та {% endfor %} повторюватиметься для кожного об'єкта у списку. Оновіть сторінку:

Рисунок 13.3

Чи помітили ви, що цього разу ми використали трохи відмінні позначення {{ post.title }} або {{ post.text }}? Ми маємо доступ до даних, що містяться в кожному полі, визначеному в нашій моделі Post. Також |linebreaksbr перенаправляє текст посту через фільтр щоб конвертувати розриви ліній в абзаци.

Ще одне

Було б непогано побачити як ваш сайт буде працювати в інтернеті, так? Давайте спробуєм розгорнути його в PythonAnywhere знову. Ось наступні кроки...

  • По-перше, залийте ваш код на GitHub
$ git status
[...]
$ git add --all .
$ git status
[...]
$ git commit -m "Modified templates to display posts from database."
[...]
$ git push
  • Потім, увійдіть до PythonAnywhere та перейдіть до Bash консолі (або запустіть нову) і виконайте команди:
$ cd my-first-blog
$ git pull
[...]
  • Нарешті, перейдіть на вкладку Web і натисніть Reload (перезавантажити) у веб-додатку.

Вітаємо! А тепер спробуйте додати новий пост у вашому Django адміністраторі (не забудьте додати published_date!), потім перезавантажте сторінку, щоб переконатись, чи з'явився новий пост.

Все працює, як годинник? Ми пишаємося! Відійдіть ненадовго від комп'ютера, ви заслуговуєте на перерву. :)

Рисунок 13.4

results matching ""

    No results matching ""