我在为 Django 中的特定页面设置默认 URL 时遇到了一些问题
Posted
技术标签:
【中文标题】我在为 Django 中的特定页面设置默认 URL 时遇到了一些问题【英文标题】:I'm having some trouble setting default url for specific page in Django 【发布时间】:2021-12-06 20:10:36 【问题描述】:现在我的 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
我的股息.html 文件为
% extends 'base.html' %
% load static %
% block title %Dividends% endblock %
% block content %
month
% endblock %
如果我导航到 /dividends/Oct/(或任何其他月份)它工作正常,但如果我只是去 /dividends/ 它给了我
KeyError: 'month'
我做错了什么,我该如何解决?
【问题讨论】:
【参考方案1】:首先,您需要检查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
【讨论】:
【参考方案2】:你可以用非常简单的方式来做,你不需要在你的 urls.py 中定义两个端点
(?P<month>\w+|)
所以你的网址是:-
path('dividends/(?P<month>\w+|)/', views.DividendView.as_view(), name='dividendview'),
【讨论】:
以上是关于我在为 Django 中的特定页面设置默认 URL 时遇到了一些问题的主要内容,如果未能解决你的问题,请参考以下文章