Джанго - использовать общие представления или нет - PullRequest
7 голосов
/ 26 июня 2011

Я просматривал краткое руководство по опросу на сайте Django, и последняя тема - введение общих представлений. Удобный способ обойти необходимость создания пользовательских представлений для каждого шаблона URL.

Насколько я понимаю, это основная идея:

1) Запрос -> Шаблоны URL -> Вид -> Шаблон

или

2) Запрос -> Шаблоны URL (общий вид) [-> необязательный шаблон]

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

Мне действительно нравится идея иметь шаблоны URL как таковые - шаблоны, а не добавлять дополнительные шаблоны. Мне также нравится идея явного определения всех видов, даже простых, чтобы потом я знал, где найти их все, не просматривая файлы. Кроме того, мы все знаем, что любую автоматику сложнее настроить, чем то, что вы создаете с нуля (по крайней мере, с нуля Django).

Я что-то упустил? Я делаю большую ошибку, которая будет преследовать меня позже, если я вообще не использую общие представления?

Ответы [ 3 ]

10 голосов
/ 26 июня 2011

Назначение универсальных представлений состоит в том, чтобы уменьшить стандартный код, когда вы неоднократно используете похожий код в нескольких представлениях. Вы должны действительно использовать это только для этого. По сути, просто потому, что django разрешает то, что вы делаете в общем , вы не должны этого делать, особенно если ваш код становится не таким, как вы .

Если вы используете классовые представления django-1.3, вместо передачи многих переменных в функцию в urls.py, вы можете переопределить соответствующие методы, представляющие интерес, что обеспечивает лучшее из обоих миров. - Меньше кода и больше контроля.

3 голосов
/ 26 июня 2011

Использовать ли общие представления или нет - ваша прерогатива. Это не доставит вам никаких хлопот, хотя вы можете обнаружить, что кодируете повторяющуюся логику представления. Возможно, вы захотите использовать обернутые / вложенные в общий вид представления в вашем views.py (часто вы все равно захотите их настроить), что позволит исключить шаблон из вашего urls.py и всех представлений в одном месте.

2 голосов
/ 27 июня 2011

В django 1.2 я использую общие представления, но внутри «нормального» представления, а не в URL, например:

#views.py
import generic_views

def my_generic_list(request):
    qs = Something.objects.filter(some arguments)
    return generic.object_list(queryset = qs, ... other stuff, usually extra_context)

таким образом (imo) представление очень просто, но может стать «реальным» в случае изменений, в то время как urls.py остается чистым

...