如何将可选参数传递给 Django 中的视图?

问题描述 投票:0回答:1

我有一个带有两个可选关键字参数的视图:team 和year_month

def monthly_data_list(request, year_month:str=None, team=None):

从模板中,我想使用这两个参数之一或两者来调用不同的组合。

Django 文档给出了实现此示例:

path('monthly/list/', views.monthly_data_list, {'team':None, 'year_month'=None },name='monthly-data-list'),

但是,使用一个或两个参数从模板调用此 URL 会出现 NoReverseMatch 错误:

hx-get="{% url 'drivers:monthly-data-list' team=None year_month=current_year_month %}"

我找到了here建议的解决方法,即定义所有参数组合的路径。这适用于 2 个参数,但更多参数会变得复杂。

如何正确实现多个可选参数?

django django-templates django-urls
1个回答
0
投票

您误解了文档。如果你写一个路径:

path(
    'monthly/list/',
    views.monthly_data_list,
    {'team': None, 'year_month': None},
    name='monthly-data-list',
),

该路径将不会采用任何参数,无论是否可选。该路径将接受

/monthly/list/
作为路径,并将为
None
team
填充
year_month

如果您的视图可以通过多个模式提供服务,则通常会传递这些参数,例如:

urlpatterns = [
    path(
        'monthly/list/',
        views.monthly_data_list,
        {'team': None, 'year_month': None},
        name='monthly-data-list',
    ),
    path(
        'monthly/list/<str:team>/',
        views.monthly_data_list,
        {'year_month': None},
        name='monthly-data-list',
    ),
    path(
        'monthly/list/<str:team>/<str:year_month>/',
        views.monthly_data_list,
        name='monthly-data-list',
    ),
]

所以现在我们有三个模式,其中一个没有任何

team
year_month
,然后我们使用
None
代替,一个带有
/<str:team>/
,在这种情况下,我们将填写
None
作为`year_month,最后是一个可以指定两者的地方。

在这种情况下,我们可以通过提及必要的参数来进行相反的操作,例如他的情况:

{% url 'monthly-data-list' team='Foo' %}

然后,这将选择第二条路径,并为

'Foo'
填写
team
,并且它将用
monthly_data_list
None
调用
year_month

© www.soinside.com 2019 - 2024. All rights reserved.