了解Django中views.pyfile中HttpResponseRedirect的"args"

Understanding the "args" of HttpResponseRedirect in views.pyfile in Django

我的 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 的参数。 this args 在入口函数中传递到哪里?我只需要这个“args”的幕后操作。

url 模式可能有一个参数,例如:

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

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

args 需要一个可迭代的项目,这些是 positional 参数。 kwargs 需要一个将字符串映射到值的字典,这些是 named 参数。

对于 entry 路径的给定示例,如果请求具有 POST 值 foobar,它将构造一个url /条目/<i>foobar</i>/.

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

from django.shortcuts import <b>redirect</b>

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