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'
我需要创建基于月份的视图。我可以按月过滤我的条目项目,我可以将它们显示在 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'