Создадим новую страницу, таблицу в базе данных и наполним её записями.
Создание приложения
В текущем проекте есть приложение, обрабатывающее ссылки главной страницы и страницы «О нас». Для обработки страниц новостей (добавление, вывод, редактирование, удаление) создадим отдельное приложение. Это позволит разделить функционал сайта на логические категории.
Создадим приложение с помощью терминала:
python manage.py startapp news
В созданном приложении news находятся файлы, аналогичные основному приложению. После создания, зарегистрируем его в settings.py:
INSTALLED_APPS = [
# ... другие приложения ...
'news',
# ...
]
Настройка URL-адресов
В файле urls.py проекта добавим обработчик для URL-адресов, начинающихся с /news/:
from django.urls import path, include
urlpatterns = [
# ... другие URL-адреса ...
path('news/', include('news.urls')),
# ...
]
Создадим файл urls.py внутри приложения news:
from django.urls import path
from . import views
urlpatterns = [
path('', views.news_home, name='news_home'),
]
Этот код указывает, что при переходе по любому URL-адресу, начинающемуся с /news/, будет вызываться функция news_home из views.py приложения news. Пустая строка после /news/ означает, что функция будет вызвана и для /news/.
Создание представления и шаблона
В views.py приложения news создадим функцию news_home:
from django.shortcuts import render
def news_home(request):
return render(request, 'news/news_home.html')
Здесь используется функция render для отображения шаблона news/news_home.html. Создадим папку templates/news/ в приложении news и файл news_home.html:
{% extends 'main/base.html' %}
{% block title %}Новости на сайте{% endblock %}
{% block content %}
<h1>Новости на сайте</h1>
{% endblock %}
Этот шаблон наследует базовый шаблон base.html из приложения main и изменяет заголовок. Изначально, для демонстрации, будем использовать шаблон about.html из приложения main. Запустим локальный сервер командой python manage.py runserver и перейдем по адресу /news/. Мы увидим страницу «О нас». После создания шаблона news_home.html, обновим страницу и увидим корректный шаблон. Добавим ссылку на страницу новостей в навигацию.
Работа с базой данных: создание модели и миграции
Создадим модель Article в файле models.py приложения news:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=50, verbose_name='Название')
anons = models.CharField(max_length=250, verbose_name='Анонс')
full_text = models.TextField(verbose_name='Статья')
date = models.DateTimeField(verbose_name='Дата публикации')
def __str__(self):
return f'{self.title}'
Эта модель описывает таблицу articles с полями: title, anons, full_text и date. Для создания таблицы, выполним миграции:
python manage.py makemigrations
python manage.py migrate
Команда makemigrations создает файлы миграции, а migrate — применяет их.
Панель администратора
Для доступа к панели администратора, перейдем по адресу /admin/. Зарегистрируем модель Article в admin.py приложения news:
from django.contrib import admin
from .models import Article
admin.site.register(Article)
Обновим панель администратора. Переведем её на русский язык, изменив переменную LANGUAGE_CODE на ‘ru’ в файле settings.py. Создадим суперпользователя командой:
python manage.py createsuperuser
Теперь можем войти в панель администратора и добавлять новые записи в таблицу articles.
В этом уроке мы создали приложение, настроили URL-адреса, создали представление и шаблон, а также создали модель для работы с базой данных и настроили панель администратора. В следующем уроке мы научимся выбирать данные из базы данных и отображать их на сайте.