Есть ли способ передать переменную в общий вид в Django? - PullRequest
2 голосов
/ 29 августа 2011

Я использую общие представления Django и пытаюсь найти способ отфильтровать список статей, используя D.R.Y.

Мой текущий файл urls.py (только соответствующий раздел):

all_articles = {
    'queryset'      :   Article.objects.all(),
    'template_name' :   'article/admin.html'
}

url(r'^admin/$', object_list, all_articles, 'admin_article_home'),

Я хочу сделать что-то вроде следующего, но без всего, казалось бы, избыточного кода:

filter_status_draft = {
'queryset'      :   Article.objects.filter(status = 'Draft'),
'template_name' :   'article/admin.html'
}

filter_status_scheduled = {
'queryset'      :   Article.objects.filter(status = 'Scheduled'),
'template_name' :   'article/admin.html'
}

url(r'^admin/filter/status/draft/$', object_list, filter_status_draft, 'admin_article_status_filter_draft'),
url(r'^admin/filter/status/scheduled/$', object_list, filter_status_scheduled, 'admin_article_status_filter_scheduled'),

Кажется, должен быть более эффективный способ сделать это.

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

Нет ли способа сделать что-нибудь простое?

1 Ответ

1 голос
/ 29 августа 2011

Если вы не хотите писать свои собственные представления, другой способ сделать это - написать собственные менеджеры моделей. Таким образом, вы бы написать вам urls.py, как:

filter_status_draft = {
    'queryset'      :   Article.objects.drafted(),
    'template_name' :   'article/admin.html'
}

filter_status_scheduled = {
    'queryset'      :   Article.objects.scheduled(),
    'template_name' :   'article/admin.html'
}

Проверьте документацию по написанию пользовательских менеджеров моделей для получения дополнительной информации.

Однако написание представлений, особенно теперь, когда представления основаны на классах, является гораздо более гибким и СУХИМЫМ подходом в долгосрочной перспективе.

...