https://docs.djangoproject.com/en/1.6/topics/forms/中的示例演示了表单的用法,并包含以下代码:
def contact(request):
if request.method == 'POST': # If the form has been submitted...
form = ContactForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
return HttpResponseRedirect('/thanks/') # Redirect after POST
else:
form = ContactForm() # An unbound form
return render(request, 'contact.html', {'form': form,})
和contact.html模板
<form action="/contact/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
我想知道是否可以在render(request,...,{'form':form,})
而不是指定模板文件contact.html
来传递带有模板内容的变量,如下所示:
html = """
<html>
<head> bla bla bla</head>
<body>
<form action="/contact/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
</body>
"""
return render(request, html, {'form': form,})
如果可能出现与此类方法相关的缺点和风险?
提前致谢!
答案 0 :(得分:2)
不使用render
,这是加载模板,呈现模板并返回响应的快捷方式。但你可以通过单独的电话来完成:
from django.template import RequestContext, Template
tpl = Template(html)
rendered = tpl.render(RequestContext(request, {'form': form}))
return HttpResponse(rendered)
主要缺点是你在python文件中混合了HTML,这使得它很难阅读。购买你可以使用这种技术从数据库或api加载模板,例如。