Простой блог на Django - часть 15. Создание статических страниц

До этого момента мы создавали страницы с динамически генерируемым контентом, а тому, как создавать простые статичные страницы, особо внимания не уделялось. Давайте исправим это, тем более в нашем шаблоне как раз такая страница и есть - About называется.

Первым делом создаём приложение, которое будет называться pages. Далее в файле маршрутов pages/urls.py пропишем:

from django.urls import path

from . import views

app_name = 'pages'

urlpatterns = [
  path('about/', views.AboutPagesView.as_view(), name='about'),
]

Возможно вы обратили внимание, что в этот раз мы используем функцию as_view() - связано это с тем, что здесь мы будем использовать встроенный механизм наследования Django. Если говорить начистоту, то особой необходимости в этом нет, цель лишь одна - показать, что в работе с шаблонами можно использовать и такой способ. 

Далее прописываем ссылку на файл urls.py в главный файл с маршрутами /newapp/newapp/urls.py:

path('pages/', include('pages.urls')),

Что касается View функции, то она проста до невозможного:

from django.views.generic.base import TemplateView

class AboutPagesView(TemplateView):
  template_name = 'pages/about.html'

А большего нам и не надо, ведь мы просто будем выводить статику из файла html, не передавая в шаблон каких-то дополнительных данных. То есть, достаточно будет в папке /templates создать файл pages/about.html с максимально простым содержимым:

Здесь будет новый шаблон

И теперь, если перейти по пути /pages/about/ то мы увидим содержимое страницы about.html От базового шаблона мы не производили здесь наследования, поэтому соответственно его элементы (шапка, подвал, стили и т. д.) не подгрузились.

Однако, если всё же есть необходимость в том, чтобы передать на такую страницу какую-то информацию, сделать это можно так:

from django.views.generic.base import TemplateView

class AboutPagesView(TemplateView):
  template_name = 'pages/about.html'

  def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['title'] = 'О компании'
    context['text'] = 'Текст странички'
    return context

В этом случае, к переменным в шаблоне можно будет обратиться следующим образом:

{{ title }}
{{ text }}

Весь же код шаблона, с учётом наследования от базового шаблона, будет таким:

{% extends "index.html" %}

{% block h1 %}
  {{ title }}
{% endblock %}

{% block content %}
  {{ text }}
{% endblock %}

Добавление статической картинки

В предыдущей заметке, когда я рассказывал о том, как прикреплять картинки к постам, мы для этих целей уже создали секцию image. Сама картинка у нас тоже есть, поскольку мы когда-то уже копировали весь шаблон в папку static. Всё что осталось сделать - это в шаблоне about.html переопределить соответствующую секцию: 

{% load static %}
{% block image %} {% static "img/about-bg.jpg" %} {% endblock %}

Все изменения в коммите

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.