【问题标题】:Django check if url parameter was providedDjango 检查是否提供了 url 参数
【发布时间】:2020-10-09 01:06:28
【问题描述】:

我有一个网址:

path('admin-panel/users/update/<id>/',user_update_for_admin, name="user_update_for_admin"),

以及该网址的视图:

def user_update_for_admin(request,id):

    user = get_object_or_404(UsersForAdmin, id=id)

一切正常,但如果 url 中没有提供 id,例如我输入:

管理面板/用户/更新/

我收到了这个错误: 字段“id”需要一个数字,但得到了“更新”。 我该如何解决?

【问题讨论】:

    标签: django url get django-urls


    【解决方案1】:

    使用path converter [Django-doc],这样 URL 只会在它是数字(数字序列)的情况下“触发”:

    path(
        'admin-panel/users/update/<int:id>/',
        user_update_for_admin,
        name='user_update_for_admin'
    ),

    如果你传递一个非整数值,它不会“触发”并寻找其他路径。如果没有路径捕获 url 模式,它将返回 404,这可能是最有意义的 HTTP 响应。

    您还需要将上面的路径重写为:

    path(
        'admin-panel/users/<int:id>/',
        user_detail_for_admin,
        name='user_detail_for_admin'
    )

    【讨论】:

    • @NAS: 是指user_update_for_admin 函数吗?你确实使用了&lt;int:...&gt;,对吧?
    • @NAS:乍一看,您似乎还有一条路径admin-panel/users/&lt;id&gt;(所以updateid 匹配)。
    • @NAS:通常不会。你确定错误是由同一个视图引发的吗?
    • @NAS:通常路径 admin-panel/users/update/ 但一开始不应触发此视图,因为它至少需要一个字符来表示 &lt;id&gt;
    • @NAS:它上面一行的路径是罪魁祸首,这也需要一个&lt;int:...&gt;。事实上,可能大多数(全部)&lt;id&gt;s 最好用&lt;int:id&gt; 代替。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2018-07-28
    • 2012-01-25
    • 1970-01-01
    • 2016-07-05
    • 2016-06-18
    • 1970-01-01
    相关资源
    最近更新 更多