我在为 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&lt;month&gt;\w+|)

所以你的网址是:-

path('dividends/(?P<month>\w+|)/', views.DividendView.as_view(), name='dividendview'),

【讨论】:

以上是关于我在为 Django 中的特定页面设置默认 URL 时遇到了一些问题的主要内容,如果未能解决你的问题,请参考以下文章

使用锚标记链接到 Django 中另一个应用程序(页面)中的特定 div

Django:提要的反向查找URL?

Django 视图只呈现一页,不会呈现其余页面

设置一个默认值的参数来路由django中的url

URL中的Django默认参数

使用 Django 将基本 URL 转发到特定页面