HTML POST表单结构与Django模板POST请求:现有HTML表单转Django代码求助
HTML表单转Django模板实现方案
你提供的是提交到Salesforce的WebToLead表单,对应有两种Django模板等价实现方式:
最简直接转换(复用原有HTML结构)
不需要修改原有表单提交逻辑,仅清理原代码中无效的冗余</select>标签即可直接在Django模板中使用:
<form action="https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" method="POST"> <input type="hidden" name="oid" value="00D280000016jv0"> <input type="hidden" name="retURL" value="https://url/form/"> <label for="first_name">First Name</label> <input id="first_name" maxlength="40" name="first_name" size="20" type="text" /><br> <label for="last_name">Last Name</label> <input id="last_name" maxlength="80" name="last_name" size="20" type="text" /><br> <label for="email">Email</label> <input id="email" maxlength="80" name="email" size="20" type="text" /><br> <label for="phone">Phone</label> <input id="phone" maxlength="40" name="phone" size="20" type="text" /><br> <input type="submit" name="submit"> </form>
注意:因为该表单直接提交到外部Salesforce站点,不需要添加Django默认的{% csrf_token %}标签,第三方站点不会验证Django的csrf凭证。如果后续调整为提交到你自己的Django后端处理,才需要在form标签内部第一行补充{% csrf_token %}。
符合Django最佳实践的实现(使用Form类)
如果需要在Django侧做表单校验、字段默认值填充、样式统一管理,可以用Django Form类实现:
第一步:编写forms.py
from django import forms class SalesforceLeadForm(forms.Form): first_name = forms.CharField(max_length=40, label="First Name", widget=forms.TextInput(attrs={'size':'20'})) last_name = forms.CharField(max_length=80, label="Last Name", widget=forms.TextInput(attrs={'size':'20'})) email = forms.EmailField(max_length=80, label="Email", widget=forms.TextInput(attrs={'size':'20'})) phone = forms.CharField(max_length=40, label="Phone", widget=forms.TextInput(attrs={'size':'20'}))
第二步:视图中传入表单实例
from .forms import SalesforceLeadForm def lead_form_view(request): # 如果需要回填默认值可以在实例化时传入initial参数 form = SalesforceLeadForm() return render(request, '你的模板路径.html', {'form': form})
第三步:模板代码
如果不需要自定义字段布局,直接批量渲染即可:
<form action="https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" method="POST"> <input type="hidden" name="oid" value="00D280000016jv0"> <input type="hidden" name="retURL" value="https://url/form/"> {{ form.as_p }} <input type="submit" name="submit"> </form>
如果需要自定义每个字段的渲染样式,可以分开写每个字段的逻辑:
<form action="https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" method="POST"> <input type="hidden" name="oid" value="00D280000016jv0"> <input type="hidden" name="retURL" value="https://url/form/"> <div> <label for="{{ form.first_name.id_for_label }}">{{ form.first_name.label }}</label> {{ form.first_name }} <br> </div> <div> <label for="{{ form.last_name.id_for_label }}">{{ form.last_name.label }}</label> {{ form.last_name }} <br> </div> <div> <label for="{{ form.email.id_for_label }}">{{ form.email.label }}</label> {{ form.email }} <br> </div> <div> <label for="{{ form.phone.id_for_label }}">{{ form.phone.label }}</label> {{ form.phone }} <br> </div> <input type="submit" name="submit"> </form>
内容的提问来源于stack exchange,提问作者Angela Rubchinksy
相关产品推荐
相关产品推荐

