如何在 Django views.py 中使用 int: 参数呈现重定向 URL?

Posted

技术标签:

【中文标题】如何在 Django views.py 中使用 int: 参数呈现重定向 URL?【英文标题】:How to render redirect a URL with an int: parameter in Django views.py? 【发布时间】:2021-05-13 05:36:05 【问题描述】:

我正在尝试在 Django 中创建一个表单,当表单在特定帐户下未正确填写时会显示错误。我希望它重新路由到与表单相同的页面,并且 url 必须有一个 int: 参数。对于我的 urls.py,我有 'edit/int:user_id>,views.edit.

我苦苦挣扎的地方是如何在views.py 中传递渲染重定向?我试过渲染重定向('/edit/int:user_id')、('/edit/int:user.id')、('/edit/user.id')等,但没有任何效果。每次我只是得到“找不到路径”。

如何根据我的 urlpatterns 使用 int 参数在 views.py 中编写重定向?

views.py

def update(request, user_id):
    errors = User.objects.empty_validator(request.POST)
    if len(errors):
        for key, value in errors.items():
            messages.error(request, value)
        return redirect('update_user', user.id)
    else:
        if 'user_id' in request.session:
            user = User.objects.get(id=job_id)
            user.title = request.POST['title']
            user.save()
            return redirect(f'/dashboard')
    return redirect('/')

【问题讨论】:

你能告诉你urls.py指定你要重定向的路线吗? 这是我的 urls.py: path('/edit/', views.edit), path('edit//update', views.update ) 我让用户转到 /edit/ 提交表单。每当错误填写表单时弹出错误,假设将用户重新路由回同一页面,并使用他们的 user_id。我不知道如何将它写入我的 views.py 页面。 我刚试过,这是我得到的错误:找不到页面 (404) 请求方法:GET 请求 URL:127.0.0.1:8000/jobs/edit 使用 python_exam2.urls 中定义的 URLconf , Django 按以下顺序尝试了这些 URL 模式: create_user login logout dashboard new/create_form edit/ edit//update [name='update_user'] jobs/view/ delete/ 当前路径 user/edit/ 与其中任何一个都不匹配 下一次,最好编辑您的问题以添加所需元素的代码(如 url、视图等)。这对试图帮助您的人来说更容易;) 对不起!这是我第一次使用 *** 或任何论坛,所以我不知道如何使用它。 【参考方案1】:

首先,您应该通过更新您的urls.py 来命名您的路线:

path('edit/<int:user_id>/update', views.update, name='update_user')

那么,在你看来,你可以像这样使用redirect函数:

redirect('update_user', user_id)

【讨论】:

我刚试过,这是我得到的错误:找不到页面 (404) 请求方法:GET 请求 URL:127.0.0.1:8000/jobs/edit 使用 python_exam2.urls 中定义的 URLconf,Django 尝试了这些 URL 模式,按以下顺序: create_user login logout dashboard jobs/new jobs/create_form jobs/edit/ edit//update [name='update_user'] jobs/view/ delete / 当前路径 user/edit/ 与其中任何一个都不匹配。 我不知道这是否有帮助,但这是我的views.py: def update(request, user_id): errors = User.objects.empty_validator(request.POST) if len(errors) :对于errors.items()中的键,值:messages.error(request,value)return redirect('update_user',user.id)否则:如果request.session中的'user_id':user = User.objects.get( id=job_id) user.title = request.POST['title'] user.save() return redirect(f'/dashboard') return redirect('/') 哦,那你应该用user_id替换user.id 我刚把它改成user_id,这是我得到的错误:MultiValueDictKeyError at /edit/4/update 'title' 请求方法:GET 请求 URL:127.0.0.1:8000/edit/4/update Django 版本:3.1 异常类型: MultiValueDictKeyError 很抱歉一直打扰您,顺便感谢您的帮助!我很感激! @Crystal 这似乎是一个不同的问题。此外,正如 Benbb96 所建议的,您应该编辑您的问题以添加任何代码/说明。您可以通过按帖子/问题下方的编辑按钮来做到这一点。

以上是关于如何在 Django views.py 中使用 int: 参数呈现重定向 URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django views.py 中使用 int: 参数呈现重定向 URL?

如何在 Django 中重复调用 views.py 中的函数?

如何在 Django 的 views.py 中引发 ValidationError(或做类似的事情)?

如何在 django views.py 中随机播放列表?

Django - 如何在views.py中访问实例的值

如何从views.py文件将数据插入django数据库?