我有一个视图,它接受两个可选的关键字参数:team和year_month

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

在模板中,我希望使用这两个参数中的一个或两个调用不同的组合.

Django docs给出了实现这一点的示例:

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个参数,但在更多的参数上会变得复杂.

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

推荐答案

您误解了文档.如果您写下路径:

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

该路径not将接受任何参数,无论是可选的还是不是.该路径将接受/monthly/list/作为路径,并且它将为teamyear_month填充None.

如果您的视图可以通过multiple种模式提供服务,则通常需要传递这些参数,例如:

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',
    ),
]

因此,现在我们有three个模式,一个没有teamyear_month,然后我们使用None代替,一个有/<str:team>/,在这种情况下,我们将为`Year_Month填入None,最后一个模式可以同时指定两者.

因此,在这种情况下,我们可以通过提及必要参数来进行反转,例如:

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

然后,它将 Select 第二条路径,并将team填入'Foo',并将monthly_data_listNone一起调用year_month.

Django相关问答推荐

Django 中主键的隐式 UUID 自动字段

通过 B 的外键列表访问模型 B 的行

`.objects` 属性在哪里添加到 Django 的 models.Model 类中的实例命名空间?

根据当前对象中的多对多字段过滤对象

Django Query 在基于通用类的 UpdateView 中重复了 2 次

Django:如何在表单 clean() 方法的 django 验证错误中添加 超链接?

django 创建多种类型用户的最佳方法

Django:想要将一个空字段显示为空白而不是显示无

Django中基于令牌的身份验证

Django {{ MEDIA_URL }} 空白 @DEPRECATED

如何判断 Python unicode 字符串是否包含非西方字母?

如何使用自定义 AdminSite 类?

如何将 Django forms.ChoiceField 呈现为 Twitter Bootstrap 下拉菜单

Python 社区里的小马是怎么回事?

如何在 Django 中触发 500 错误?

在 Django shell 启动时自动导入模型

将 jQuery 脚本添加到 Django 管理界面

在 Django 开发服务器中关闭静态文件的缓存

ImportError:没有名为 django_filters 的模块

获取'str'对象在Django中没有属性'get'