Django/python: 如何将 form.cleaned_data 值作为参数传递给 HttpResponseRedirect?
Django/python: How to pass the form.cleaned_data value to HttpResponseRedirect as an argument?
我想在 URL 中传递一个参数(表单字段值),如下所示。但是当我这样做时,它会引发错误
not enough arguments for format string
我将不胜感激帮助我解决这个问题或建议我将 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)
你试过吗?
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))
您使用的字符串替换已过时。这可能是 long-term 解决方案的更好方法。
问题是 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
我想在 URL 中传递一个参数(表单字段值),如下所示。但是当我这样做时,它会引发错误
not enough arguments for format string
我将不胜感激帮助我解决这个问题或建议我将 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)
你试过吗?
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))
您使用的字符串替换已过时。这可能是 long-term 解决方案的更好方法。
问题是 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