Django 5 для начинающих

Прогресс по курсу:  9/1004

3.8 Views/Templates/URLs
1 из 6 шагов пройден
0 из 23 баллов  получено

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

Давайте начнем с представлений. В прошлом модуле мы использовали встроенный общий вид TemplateView для отображения файла шаблона домашней страницы. Теперь мы хотим перечислить содержимое нашей модели базы данных, для этого нам нужно выполнить запрос и передать его содержимое в шаблон.

В файл orm_method/views.py введите приведенный ниже код:

from django.shortcuts import render
from orm_method.models import Worker


def index(request):
    people = Worker.objects.all()
    return render(request, "index.html", {"people": people})

В функции index() мы получаем все данные в объект people с помощью метода Worker.objects.all() и затем передаем их в шаблон index.html.

Наше представление завершено, теперь нам нужно настроить наши URL и сделать наш шаблон.

Создайте новую директорию шаблонов под названием templates. PyCharm Professionals создает эту папку при создании проекта. Не забываем проверять и обновлять DIRS в нашем файле Course_SecondProject/settings.py, чтобы Django знал, что нужно искать в этой директории шаблоны:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'], # указываем путь к каталогу с шаблонами
        # ...
    },
]

Cоздайте новый файл с именем templates/index.html.

Функция представления index возвращает нам контекстную переменную people, которую мы можем перебирать с помощью встроенного тега шаблона for.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Django - SecondProject</title>
</head>
<body>
<table>
{% for person in people %}
    <tr>
        <td>{{ person.id }}</td>
        <td>{{ person.first_name }}</td>
        <td>{{ person.last_name }}</td>
        <td>{{ person.age }}</td>
        <td>{{ person.created }}</td>
        <td>{{ person.work_experience }}</td>
    </tr>
{% endfor %}
</table>
</body>
</html>

Последний шаг - это настройка наших URL.

Начнем с файла Course_SecondProject/urls.py, в который мы включим наше приложение orm_method и добавим include во второй строке:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('orm_method.urls'))
]

Затем создайте новый файл urls.py в приложении orm_method и добавьте в него следующие маршруты:

from django.urls import path
from orm_method import views

urlpatterns = [path("", views.index, name="index"), ]

Перезапустите сервер с помощью python manage.py runserver и перейдите на нашу домашнюю страницу(http://127.0.0.1:8000), на которой теперь отображаются все наши работники.

Если вдруг у вас появились трудности, смотрите или клонируйте код с ГитХаба - https://github.com/Permin0ff/Course_SecondProject_2


  • Комментариев
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Комментарий закреплён

Понравилась задача, тест или урок? Поставьте лайк, поддержите курс. Ваша поддержка очень важна для нас.

Чтобы каждый раз не запускать сервер вручную, если вы пользуетесь PyCharm, можно создать конфигурацию:

Запуск и останов выполняются очевидными кнопками. Чтобы создать конфигурацию, нужно выбрать
 Edit Configurations...

Нажмите + , с параметрами разберетесь. Приложу пример, то, что нужно ввести или выбрать, я "подсветил":

Посмотрел ваш код. У вас в orm_method/models.py в классе Book используется отношение один ко многим (ForeignKey), но там не указан аргумент on_delete

@Gogol_Google, спасибо, исправил.

Тут наверное имелось ввиду приложение orm_method:

Подскажите пожалуйста, зачем указывается переменная name? Это не излишне?

@Максим_Михеев, эта переменная задаёт имя маршрута, которое обычно используется чтобы выводить url данного маршрута в шаблонах, например так: {% url 'index' %}. В данном примере имя не нужно.