Django Framework → Разные варианты отображения для одних и тех же данных
Опыт "забавностей" становится всё больше и больше. Вот очередной случай маразма. Коротко суть:
P.S> Помните об эффективности и красоте кода, это крайне важно.
P.P.S> Конечно, это статья скорее о рефакторинге и MVC, но встречаю данную ошибку чаще всего в django проектах, уж не знаю почему.
Существует сайт, на котором нужно выводить одни и те же объекты с разными условиями выборки (по категории, по тегу, "захабареные" и т.п.) и разными отображениями (список, подробно и т.п.).Некоторые индивиды, создают в каждом view замысловатую структуру из if-ов, и каждый раз она повторяется. Запомните:
- Рефакторинг
- Рефакторинг
- Рефакторинг
- view это просто функция!
return extra_view(request, objects=myobjects)Для полноты восприятия, приведу код по-больше.
def list(request):
"""
Выводит списко всех объектов
"""
myset = MyDataObject.objects.all()
return extra_view(request, myset)
def category(request, category_id):
"""
Выводит список объектов по категории
"""
category = get_object_or_404(Category, pk=category_id)
myset = MyDataObject.objects.filter(category=category)
return extra_view(request, myset)
def extra_view(request, object_set):
"""
Обёртка
"""
view_type = request.GET.get('view_type', 'list')
return render_to_response('view_type/%s.html' % view_type', {'objects': object_set}
Это крайне простой пример (извините, немного лень писать больше, а рабочий код, по понятным причинам, показать не могу). У меня же ещё навешаны: сортировка, выборка по дате и пр.
Замечу, что можно легко использовать декораторы, и тогда немного поменяется всё, но это мелочи (вместо того, чтобы возвращать extra_view, функция будет возвращать просто object_set; мне просто более понятен представленный подход)P.S> Помните об эффективности и красоте кода, это крайне важно.
P.P.S> Конечно, это статья скорее о рефакторинге и MVC, но встречаю данную ошибку чаще всего в django проектах, уж не знаю почему.

комментарии (4)
Под разными данными я понимаю содержимое, а не форму. Форма у данных одна и таже.
Посему: что мешает оставлять один и тот-же вид, а в котроллере отлавливать параметры сортировки?
Суть в том, что в extra_view мы получаем одни и те же данные в плане их структуры, а вот отображаем в зависимости от потребностей пользователя.
Приведу для примера свой код, всё же.
Как бы это доходчиво другим обьяснить?