Django url 按数据组配置

Django url configuration by groups of data

我需要创建基于月份的视图。我可以按月过滤我的条目项目,我可以将它们显示在 html 页面上。我很难做的只是从主页显示您 select 哪个月的数据。因此,例如,如果您单击“十一月”,它会将您带到一个仅显示十一月项目的页面,依此类推。为此我需要特定的 url 配置吗?我希望有一种更简单的方法来执行此操作,而不是为每个月创建一个视图,然后创建每个月的 url...

urls.py

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),

    url(r'entry/list/?P<month_here>$', views.EntryListView.as_view(), name='entry-list'),

]

views.py

class EntryListView(generic.ListView):
    template_name = 'argent/index_list.html'
    context_object_name = 'object_list'

    def get_queryset(self):
        return Entry.objects.all()

    def get_context_data(self, **kwargs):
        mth = super(EntryListView, self).get_context_data(**kwargs)

        # ENTRY BY MONTH

        # January17
        mth['January17_qs'] = Entry.objects.filter(date__range=('2017-1-1', '2017-1-31'))

        # February17
        mth['February17_qs'] = Entry.objects.filter(date__range=('2017-2-1', '2017-2-28'))

        return ctx

您可以解析来自 url 的参数。以上将在您的视图中添加名称为 "month" 的查询参数,它应该是一个单词 (\w+ regex)

url(r'entry/list/(?P<month>\w+)$', views.EntryListView.as_view(), name='entry-list')

然后在 get_context_data 你应该在你的 kwargs 中有这个:

month = self.kwargs.get('month')

然后添加解析您的参数的逻辑,然后 return 正确的查询集。

def get_context_data(self, **kwargs):
    mth = super(EntryListView, self).get_context_data(**kwargs)

    # ENTRY BY MONTH
    month = self.kwargs.get('month')

    # January17
    if month == 'january:
      mth['January17_qs'] = Entry.objects.filter(date__range=('2017-1-1', '2017-1-31'))
    elif month == 'february':
      # February17
      mth['February17_qs'] = Entry.objects.filter(date__range=('2017-2-1', '2017-2-28'))

    return mth

多年来,您还可以添加一些 for-clausule 来构建您的参数,例如:

for year in range(2016, 2019):
    mth["{}{}_qs".format(month.title(), str(year)[-2:])] = Entry.objects.filter(date__range=("{}-1-1".format(year), "{}-1-31".format(year))
# this will add you a 'January16_qs', 'January17_qs', 'January18_qs' variables if month is 'january'