我在为 Django 中的特定页面设置默认 url 时遇到一些问题



现在我把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+|)

所以你的url将是:-
path('dividends/(?P<month>w+|)/', views.DividendView.as_view(), name='dividendview'),

相关内容

  • 没有找到相关文章

最新更新