现在我把url .py设置成这样:
urlpatterns = [
...
path('dividends/<str:month>/', views.DividendView.as_view(), name='dividendview'),
path('dividends/', views.DividendView.as_view(), name='dividendview'),
]
我想让'month'参数是可选的,默认为今天的月份。现在我把views。py设置为
class DividendView(ListView):
model = Transaction
template_name = 'por/dividends.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
divs = Dividends()
month = self.kwargs['month']
context['month'] = get_month(month)
return context
def get_month(month):
if month:
return month
else:
return datetime.today().month
和我的股利。html文件为
{% extends 'base.html' %}
{% load static %}
{% block title %}Dividends{% endblock %}
{% block content %}
{{ month }}
{% endblock %}
如果我导航到/dividend/Oct/(或任何其他月份),它工作得很好,但如果我只是转到/dividends/,它会显示
KeyError: 'month'
我做错了什么,我该如何去修复它?
首先,您需要检查kwarg
'month'是否存在,然后分配月份值,否则它将引发keyError
。
Views.py
class DividendView(ListView):
model = Transaction
template_name = 'por/dividends.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
divs = Dividends()
if 'month' in self.kwargs: # check if the kwarg exists
month = self.kwargs['month']
else:
month = datetime.today().month
context['month'] = month
return context
你可以用一种非常简单的方式做到这一点,你不需要在url .py
中定义两个端点(?P<month>w+|)
path('dividends/(?P<month>w+|)/', views.DividendView.as_view(), name='dividendview'),