Ответ
Список продуктов
-
{% for product in products %}
- {{ product.name }} - {{ product.price }} руб. {% endfor %}
Ответ 18+ 🔞
Давай разберём эту вашу Django, как есть, без соплей. Представь, что это не архитектура, а такой многоэтажный бордель, где у каждого своя роль, и если кто-то начнёт ебашить не по правилам — пиздец всему проекту.
Вот смотри, как запрос идёт, по шагам, чтобы ты понял масштаб трагедии.
-
URLs (
urls.py) — это швейцар на входе, ёпта. Сидит такой, в ливрее, и спрашивает: «Ты куда, сука, прёшь? Наproducts/? А, окей, иди на второй этаж, в комнатуproduct_list, там тебя обслужат». Он просто смотрит на путь и тычет пальцем в нужную view. Если пути нет — получаешь 404, и иди нахуй, вот и вся его работа. -
Views (
views.py) — это уже комната с бизнес-логикой, где всё и происходит. Сюда приходит запрос. View — это такой главный поцуй, который орет: «Так, блядь, тихо! Что нужно? Список продуктов? Ща, погоди!». Он лезет в базу через... -
Models (
models.py) — это, собственно, сама база данных, но обёрнутая в питонячьи классы, чтобы не ебаться с SQL вручную. Модель — это схема таблицы. View кричит модели: «Давай сюда всё, что есть в таблицеProduct!». Модель через ORM делаетSELECT * FROM ...и отдаёт результат обратно во view. Всё чисто, всё легально. -
View получает данные и понимает: «Окей, но я же не могу пользователю голый Python-список в браузер сунуть, он же обосрётся». Тогда он зовёт...
-
*Templates (`.html
)** — это шаблонизатор, наш верстальщик-декоратор. View говорит ему: «На, мудак, вот данные ({'products': products}), вот шаблон (product_list.html), сделай уже наконец красивый HTML, я устал!». Шаблон, тупой как пробка, но исполнительный, начинает циклы{% for ... %}крутить, переменные{{ product.name }}` вставлять — и на выходе получается готовая HTML-страница. -
View хватает эту HTML-кучу и с торжественным видом пихает её в HTTP-ответ. «На, пользователь, получи своё говно!». И запрос завершён.
А ещё там, по углам, шляются:
- Forms (
forms.py) — это такие надзиратели за формами. Чтобы, когда пользователь что-то вводит, не пришлось вручную выковыривать данные изrequest.POSTи проверять, не ввёл ли он в поле «цена» слово «хуй». Форма сама всё создаст, проверит и скажет: «Чувак, тут ошибка, иди исправляй». - Admin (
admin.py) — это царь и бог. Автоматическая админка. Написал три строки — и у тебя уже есть веб-интерфейс для добавления, удаления и редактирования записей в базе. Сила, просто овердохуища какая-то. - Middleware — это как система скрытых камер и датчиков во всём борделе. Глобальные штуки, которые работают с каждым запросом и ответом. Например, проверяют CSRF-токен (чтобы левые запросы не пролезли) или добавляют пользователя в
request, если он залогинен. Работают тихо, в фоне.
Короче, вся эта система MVT — она чтобы разделять ответственность, блядь. Модель работает с данными, View — с логикой, Template — с внешностью. Не лезь со своей логикой в шаблон, не пытайся HTML генерить прямо во view (хотя иногда охота, бля). Держи всё на своих этажах, и будет тебе счастье, а не пиздец.