了解Django中views.pyfile中HttpResponseRedirect的“ args”

问题描述

我的views.py文件中具有以下两个功能

def entry(request,title):
    if title not in util.list_entries():
        return render(request,"encyclopedia/error.html",{
            "error": "Page Not Found","query": title
        })
    else:
        return render(request,"encyclopedia/entry.html",{
            "entry": markdown2.markdown(util.get_entry(title)),"title": title
        })


def search(request):
    if request.POST["q"] in util.list_entries():
        return HttpResponseRedirect(reverse("entry",args=(request.POST["q"],)))
    else:
        return render(request,"encyclopedia/error.html")

我们如何理解HttpResponseRedirect的参数。此args在入口函数中传递的位置?我只需要这个“ args”的幕后动作即可。

解决方法

URL模式可能具有参数,例如:

path('entry/<str:item>/',some_view,name='entry'),

使用reverse(…) function [Django-doc]args=…kwargs=…参数,您可以填充参数的值。

args需要可迭代的项,这些是 positioning 参数。 kwargs期望使用字典将字符串映射为值,这些是 named 参数。

entry路径的给定示例中,如果请求的POST值为 foobar ,则它将构造一个URL /entry/foobar/

然而,使用redirect(…) [Django-doc]更方便。这基本上称为reverse,然后将结果包装在HttpResponseRedirect中,但是它使用自身的位置参数和命名参数来填充值:

from django.shortcuts import redirect

def search(request):
    q = request.POST.get('q')
    if q in util.list_entries():
        return redirect('entry',q)
    else:
        return render(request,'encyclopedia/error.html')