![](/img/trans.png)
[英]Django: Pass form.cleaned_data to the view that handles the page to where user is being redirected with HttpResponseRedirect
[英]Django/python: How to pass the form.cleaned_data value to HttpResponseRedirect as an argument?
我想在URL中传递一个参数(表单字段值),如下所示。 但是当我这样做时,会引发一个错误
格式字符串的参数不足
我希望能帮助我解决此问题,或者建议我将form_cleaned值传递给HttpResponseRedirect的替代方法。
def phone(request):
form = PhoneForm(request.POST or None)
if form.is_valid():
instance = form.save(commit=False)
Phone = form.cleaned_data.get('Phone')
instance.save()
form.save()
return HttpResponseRedirect('http://send_sms.com/api_key=api&to=%s&message=Welcome%20to%messaging' %Phone)
context = {
"form": form,
}
return render(request, "phone.html", context)
问题在于,Python还将字符串中的其他%
符号也视为占位符。
您可以将其他百分号加倍(例如Welcome%%20
),或使用.format(Phone)
,但是一种更安全的方法是让Python来为您编码查询字符串。
from urllib.parse import urlencode # Python 3
# from urllib import urlencode # Python 2
query = {
'api_key': 'api',
'to': Phone,
'message': 'Welcome to messaging',
}
url = 'http://send_sms.com/?%s' % urlencode(query)
return HttpResponseRedirect(url)
希望它更具可读性,并减少出错的机会。 例如,在您的问题中, %messaging
有%
而不是%20
。
你试过这个吗?
from urllib.parse import urlencode # Python 3
# from urllib import urlencode # Python 2
def phone(request):
form = PhoneForm(request.POST or None)
if form.is_valid():
instance = form.save(commit=False)
argument = form.cleaned_data.get('Phone')
instance.save()
# form.save() -- redundant here imho
return HttpResponseRedirect(
'http://send_sms.com/api_key=api&to={}&message=Welcome%20to%messaging'.format(urlencode(argument))
)
context = {
"form": form,
}
return render(request, "phone.html", context)
您正在使用过时的格式进行字符串替换。 而且您也不需要form.save
因为您的表单是一个实例,所以instance.save()
就足够了。
您可以尝试使用以下格式:
return HttpResponseRedirect('http://send_sms.com/api_key=api&to={}&message=Welcome%20to%messaging'.format(Phone))
您正在使用的字符串替换已过时。 对于长期解决方案,这可能是更好的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.