Какой лучший DRY способ повторить представление на основе класса в Django? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть приложение, которое действует как букер для конечного пользователя; в основном это форма, вызывающая различные API (BookerApp). Он использует два основных API, но по-разному; Он вызывает Google, чтобы получить геолокацию (получение данных о широте и долготе) для передачи через второй API. Проблема в том, что мне нужно использовать это приложение в основном WebsiteApp и его последующих шаблонах, но с небольшими изменениями внешнего вида (шаблонов). Я знаю, что могу повторить CBV в приложении веб-сайта и изменить ведущий визуализированный файл шаблона; но было интересно, есть ли лучший метод DRY для этого? Вот текущая структура

Project folder >
|___ MainProject
          |__ settings.py
          |__ urls.py
          |__ settings.py

|___ WebsiteApp
          |__ Templates
          |__ views.py <----- repeat the same CBV (found in booker) to here with DRY method
          |__ urls.py
          |__ etc..

|___ BookerApp
          |__ Templates
          |__ views.py <--- CBV held here
          |__ etc..

|___ Static

Надеюсь, это имеет смысл; Я знаю, что мой проект можно найти повсюду, и любые рекомендации будут приветствоваться. папку без необходимости повторять CBV в этом конкретном файле просмотров.

1 Ответ

1 голос
/ 19 июня 2020

Конечно, можно с помощью наследования. Создайте собственный класс

class Obect(object):

Затем переопределите любой из стандартных методов в классе объекта, который находится в cbv

Обычно я делаю то, что указано выше, а затем позволяю представлению шаблона унаследовать мои пользовательский класс и просто скажите "пройти" Затем я использую этот класс в своих недавно созданных классах для определенных c URL-адресов.

Чтобы сделать еще один шаг вперед, каждый cbv имеет метод получения данных контекста. Которая затем переходит в метод рендеринга в ответ. Ваши данные контекста получения могут передавать разные kwargs для рендеринга чего-то динамического c при рендеринге в ответ. Итак, к вашему мнению, можно передать только kwarg веб-сайта, который будет захвачен при рендеринге для ответа и показать только контекст, связанный с веб-сайтом

В конце дня вы просто имеете дело с классами python и понимаете цикл запросов и ответов методов в cbv. ccbv.co.uk отлично подходит для этого.

Я рад подробно рассказать вам об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...