Как написать многоразовые представления в Django? - PullRequest
0 голосов
/ 31 марта 2010

Это методы, которые я регулярно использую для повторного использования моих представлений:

  • принять имя шаблона в качестве аргумента по умолчанию
  • принять необязательный extra_context, который по умолчанию пуст ({})
    • прямо перед отображением шаблона контекст обновляется с помощью extra_context
    • для дальнейшего повторного использования, вызывайте любое вызываемое в extra_context.values ​​()
  • всякий раз, когда представление имеет дело с набором запросов, существует аргумент набора запросов со значением по умолчанию
  • всякий раз, когда представлению требуется конкретный объект из ORM, он пытается извлечь его, используя любой параметр «id», несколькими способами (например, в качестве слага, как идентификатор базы данных) (это может быть плохой практикой ...)

Во-первых, я должен добавить что-нибудь в свой список? Должен ли я удалить что-нибудь из моего списка?

Предметы вмещают большое количество ящиков. Однако всякий раз, когда приложение каким-либо образом расширяет модель другого (например, добавляя поле или изменяя поведение), я заканчиваю тем, что пишу свои собственные представления и только повторно использую модель. Это нормально?

Редактировать / частично ответить на мой вопрос:

  • сигналов: представление должно испускать сигнал, когда он начинается, и один, прежде чем он возвращает ответ

Ответы [ 2 ]

0 голосов
/ 31 марта 2010

всякий раз, когда представлению нужен конкретный объект из ORM, он пытается извлечь его, используя любой параметр «id», несколькими способами (например, в качестве слага, как идентификатор базы данных) (это может быть плохой практикой ...)

Итак ... почему бы просто не ожидать, что экземпляр модели будет передан в качестве параметра? Или QuerySet, из которого вы возьмете элемент 0? Затем вы можете объединить его с делом QuerySet и, возможно, свернуть в get_object_or_404.

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

0 голосов
/ 31 марта 2010

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

...