了解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')
我的 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')