问题描述
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')