У меня возникли проблемы с установкой 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'),