Вывести список статей из базы данных
Шаг 1: Создание таблицы в базе данных
Сначала надо создать приложение «news».
python manage.py startapp news
Команда выше создаст папку «news» с необходимыми файлами.
В файле news/models.py надо создать модель, которая сгенерирует таблицу в базе данных.
# news/models.py from django.db import models class News(models.Model): title = models.CharField(max_length=100) created = models.DateTimeField(auto_now_add=True) active = models.BooleanField() content = models.TextField()
Параметр id
не указывается, т.к. в базе данных он создаётся автоматически.
Параметр auto_now_add
задаёт указанному полю значение по умолчанию текущую дату.
В файле settings.py в параметре INSTALLED_APPS
надо добавить приложение «news» (создавалась через команду python manage.py startapp news
).
# settings.py INSTALLED_APPS = ( # … 'news', )
В параметре INSTALLED_APPS
указаны приложения, для которых будут созданы поля в базе данных. Чтобы создать сами поля, надо выполнить следующую команду:
python manage.py makemigrations python manage.py migrate
Имя созданной таблицы будет иметь формат «приложение_модель», т.е. для текущего примера будет создана таблица news_news.
Шаг 2: Вывести список статей
В файле urls.py надо указать, какой код надо выполнять в зависимости от URL:
# urls.py from news import views urlpatterns = [ # по адресу «news/» в файле news/views.py выполнять метод index path('news/', views.index), # по адресу «news/1» в файле news/views.py выполнять метод show path('news/<int:id>', views.show, name='news_show'), ]
В файле news/views.py надо написать код для каждого URL.
# news/views.py from django.shortcuts import get_object_or_404, render from news.models import News # импорт модели News из файла news/models.py def index(request): news = News.objects.all() return render(request, "news/index.html", {"news": news}) def view(request, id): news = News.objects.get(id=id) # 1-ый способ news = get_object_or_404(News, id=id) # 2-ой способ return render(request, "news/view.html", {"news": news})
Функция get_object_or_404()
выбирате указанную страницу. Если страницы нет, то выводит сообщение «страница не найдена».
Осталось только создать страницы шаблонов.
<!-- templates/news/index.html --> {% for item in news %} <p><a href="{% url 'news_view' item.id %}">{{item.title}}</a></p> {% endfor %} <!-- templates/news/view.html --> <h1>{{news.title}}</h1> {{news.content}}
Параметр для {% url %}
берётся из файла «urls.py», где имя шаблона для ссылки указан в параметр «name». Изменяя адрес страницы в «urls.py», он автоматически обновится на всех страницах через {% url %}
.
При необходимости можно указать количество выводимых элементов через следующий код:
# выборка пяти новостей news = News.objects.all()[:5]
Поддержать автора