Django - один вид, несколько URL-адресов?

Я достаточно новичок в Python, так и Django, и хотел бы следовать за лучшими практиками, где это возможно. Я хотел бы поделиться следующим кодом, чтобы облегчить работу.

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

Я настроил следующие URL:

    url(r'^myrecords/$', login_required(RecordListView.as_view()), {'filter': 'all'}, name='myrecords'),
    url(r'^myrecords/page(?P<page>[0-9]+)/$', login_required(RecordListView.as_view()), {'filter': 'all'}, name='myrecords'),
    url(r'^myrecords/(?P<year>\d{4})/$', login_required(RecordListView.as_view()), {'filter': 'year'}, name='myrecords'),
    url(r'^myrecords/last(?P<months>[0-9]{1,2})months/$', login_required(RecordListView.as_view()), {'filter': 'month'}, name='myrecords'),

Тогда на мой взгляд, у меня есть что-то подобное (на самом деле есть несколько других параметров, но они должны оставаться прежними независимо от введенного URL.):

def get_queryset(self): 
    if (self.kwargs['filter'] == 'month'):
        x_months_ago = (datetime.date.today() - 
        datetime.timedelta(int(self.kwargs['months']) * 365 / 12))
        queryset = Record.objects.filter(user=self.request.user, 
        date__gte = x_months_ago.isoformat())
    elif (self.kwargs['filter'] == 'year'):
        queryset = Record.objects.filter(user=self.request.user, date__year=self.kwargs['year'])
    else
        queryset = Record.objects.filter(user=self.request.user)

Это кажется очень грязный для меня. Есть ли в любом случае, я могу сделать это уборщиком? Можно ли поставить параметры фильтра в какую-то структуру данных, а затем просто передавать их в Line.Objects.filter Line, а не написание целых дел несколько раз?

Любой совет будет высоко оценен.

Спасибо.

7
задан Dan 14 September 2011 в 17:27
поделиться