У меня возникли проблемы с установкой url по умолчанию для определенной страницы в Django

Сейчас у меня urls.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

и мой файл dividends.html как

{% extends 'base.html' %}
{% load static %}

{% block title %}Dividends{% endblock %}

{% block content %}
    {{ month }}
{% endblock %}

Если я перехожу к /dividends/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

Пожалуйста, примите ответ, если он вам подходит. Счастливого кодирования!

Вы можете сделать это очень простым способом, и вам не нужно определять две конечные точки в urls.py

(?P<month>\w+|)

Таким образом, ваш url будет :-

path('dividends/(?P<month>\w+|)/', views.DividendView.as_view(), name='dividendview'),
Вернуться на верх