如何通过path()函数在url中传递可选参数?

2024-04-18 17:30:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我对在Django中用path()而不是url()通过url传递可选参数感到困惑。我发现我应该使用kwargs,所以我将它添加到路径:

path('all/<str:category>/<int:page_num>/', views.show_all_objects, name="show-all-objects"),

path('all/<str:category>/<int:page_num>/', views.show_all_objects, kwargs={'city': None}, name="show-all-objects"),

好的,但是现在如何从模板传递附加参数,我尝试了:

<a href="{% url 'show-all-objects' category='restaurants' page_num=1 city=1 %}"

返回NoReverseMatch at /的常见错误

所以我把它添加到网址:

path('all/<str:category>/<int:page_num>/<int:city>/', views.show_all_objects, kwargs={'city': None}, name="show-all-objects"),

但是错误是一样的,我很确定,这不是正确的方法,但是我找不到关于通过path()传递可选参数的信息,所有信息都是用url()传递的,可能吗?你知道吗


Tags: pathnameurlcity参数objectsshowpage
1条回答
网友
1楼 · 发布于 2024-04-18 17:30:36

我有一个解决方法。

您需要做的是,在urls.py中定义N不同的路径配置,其中N可选参数

#urls.py
urlpatterns = [
                  path('foo/<param_1>/<param_2>/', sample_view, name='view-with-optional-params'),
                  path('foo/<param_1>/', sample_view, name='view-with-optional-params'),
                  path('foo/', sample_view, name='view-with-optional-params'),

              ]
#views.py
from django.http.response import HttpResponse


def sample_view(request, param_1=None, param_2=None):
    return HttpResponse("got response, param_1 is {} and param_2 is {}".format(param_1, param_2))

# template.html
<body>
<a href= {% url 'view-with-optional-params'  param_1='foo' param_2=123 %}>two parameters</a><br>
<a href= {% url 'view-with-optional-params'  param_1='foo' %}>one parameter</a><br>
<a href= {% url 'view-with-optional-params' %}>without parameter</a><br>
</body>

相关问题 更多 >