python - for - django template{%




Классовые представления в Джанго (6)

Вы всегда можете создать класс, переопределить функцию __call__ и затем указать URL-файл на экземпляр класса. Вы можете взглянуть на класс FormWizard чтобы увидеть, как это делается.

Django view указывает на функцию, которая может быть проблемой, если вы хотите изменить только немного функциональности. Да, я мог бы иметь миллион ключевых аргументов и даже больше, если бы операторы в функции, но я больше думал об объектно-ориентированном подходе.

Например, у меня есть страница, которая отображает пользователя. Эта страница очень похожа на страницу, которая отображает группу, но она все же не так похожа, просто используйте другую модель данных. Группа также имеет членов и т.д ...

Один из способов - указать на методы класса, а затем расширить этот класс. Кто-нибудь пробовал этот подход или есть другая идея?


Вы можете использовать общие виды Django. Вы можете легко достичь желаемой функциональности с помощью общих видов Django.


Если вы просто отображаете данные моделей, почему бы не использовать общие представления Django ? Они предназначены для того, чтобы вы могли легко отображать данные из модели без необходимости писать собственный вид и рассказывать о сопоставлении параметров URL с представлениями, выборке данных, обработке краевых случаев, выводе рендеринга и т. Д.


Если вы хотите поделиться общими функциями между страницами, я предлагаю вам взглянуть на пользовательские теги. Их довольно легко создать , и они очень мощные.

Также шаблоны могут расширяться от других шаблонов . Это позволяет вам иметь базовый шаблон для настройки макета страницы и делиться этим между другими шаблонами, которые заполняют пробелы. Вы можете вкладывать шаблоны на любую глубину; позволяя указать макет на отдельных группах связанных страниц в одном месте.


Обычные представления обычно являются подходящим способом, но в конечном итоге вы можете свободно обрабатывать URL-адреса по своему усмотрению. FormWizard работает на основе классов, как и некоторые приложения для API RESTful.

В основном, с помощью URL вы получаете кучу переменных и место для предоставления вызываемого объекта, то, что вы вызываете, полностью зависит от вас - стандартный способ - предоставить функцию - но в конечном итоге Django не накладывает никаких ограничений на то, что вы делаете.

Я согласен, что еще несколько примеров того, как это сделать, было бы неплохо, хотя FormWizard - это то, с чего стоит начать.


Похоже, вы пытаетесь объединить вещи, которые не должны быть объединены. Если вам необходимо выполнить различную обработку в вашем представлении, в зависимости от того, на какой объект вы пытаетесь взглянуть: пользователь или группа, вам следует использовать две разные функции представления.

С другой стороны, могут быть общие идиомы, которые вы хотели бы извлечь из представлений типа object_detail ... возможно, вы могли бы использовать декоратор или просто вспомогательные функции?

Дан





oop