使用“ ?: ”将 URL 中提供的传递参数设置为可选的 [Non-Capturing]

Posted

技术标签:

【中文标题】使用“ ?: ”将 URL 中提供的传递参数设置为可选的 [Non-Capturing]【英文标题】:making the passed parameters provided in URL as optional [Non-Capturing] using " ?: " 【发布时间】:2020-01-01 07:44:56 【问题描述】:

我想将 URL 中传递的参数设为可选。我有一个这样的网址 ->

path('users/<optional_value>',views.users_list_or_detail, name='users_list_or_details'),

我不想制作 2 个不同的 URL 来给我列表或详细信息。如何将第二个 &lt;optional_value&gt; 设为可选,以便如果我不向视图提供 &lt;optional_value&gt;,它会为我提供用户列表和用户详细信息(如果提供)?

我在 Internet 上查看的一个选项是

http://localhost:8000/users/?from=user_id

如何使用 Django 文档中给出的urls.py 中的 ?: 使其成为可选?

【问题讨论】:

【参考方案1】:

在您的模板中(这将创建您定义的 url)

<a href="% url 'users_list_or_details' %?from=user_id ">Link</a>

在你的视野中

if 'from' in request.kwargs:
    user_id = from

【讨论】:

感谢 HenryM。再次感谢您帮助我。我已经保存了你的答案。这是我对此的第二个问题。上次你的方法效果很好,但我只是想学习那个 ?: 方法。【参考方案2】:

在您看来,为您的 url kwargs 提供默认参数 None,在这种情况下为 optional_value,并检查参数是否可用。

类似:

def users_list_or_detail(request, optional_value=None):
    if optional_value:
        # render detail
    else:
        # render list

【讨论】:

但是如果我点击没有&lt;optional_param&gt;的URL,它会抛出一个错误,说正在寻找第二个参数,未提供 @Deshwal 你试过这种方法吗? 是的。我点击了users/ 之类的 URL,错误是该 url 需要一个额外的参数。我会做错什么?

以上是关于使用“ ?: ”将 URL 中提供的传递参数设置为可选的 [Non-Capturing]的主要内容,如果未能解决你的问题,请参考以下文章

传递给 PHP WordPress body_class 的 URL 参数值

使用javascript在包含特殊字符的URL中传递参数[重复]

JQuery中$.ajax()方法参数详解 ASP.NET jquery ajax传递参数

将数组作为url参数传递并重定向到新页面

PHP Laravel - 继续将 url 中传递的参数用于其他 url,如分页链接

url中传递中文参数时的转码与解码