您可以使用Django和JQuery的组合来实现这一点。在
第1步:从_ajax.html模板
模板可以简单到{{form.as_p}}。关键是而不是继承基本模板。你只需使用这个表格_ajax.html用于呈现表单的HTML的模板。在
第2步:创建一个带有slug参数的视图,它可以帮助您获得正确的格式def payment_method_ajax(request, method): # method is your slug
"""Load a dynamic form based on the desired payment method"""
options = {
'ach': ECheckForm(), # Dynamic form #1
'credit-card': CreditCardForm(), # Dynamic form #2
}
if method in options.keys():
context = {'form': options[method]}
else:
context = None
template = 'your_app_name/form_from_ajax.html'
return render(request, template, context)
第3步:在网址.py
^{pr2}$
第4步:更新您希望AJAX加载表单出现的模板
制作一些按钮让用户选择一个合适的表单选项ACH
Credit Card
表单域是加载动态表单的地方
{% csrf_token %}
确保在主视图的上下文中添加slugcontext = {
'target': 'Add a New Payment Method',
'h1': 'Add a New Payment Method',
'ach': 'Save an ACH Profile',
'credit_card': 'Save a Credit Card Profile',
'slugs': ['ach', 'credit-card'], # Here are the slugs ****
}
第5步:用JQuery和按钮的onclick加载表单
var ach = 'ACH';
var creditCard = 'Credit Card';
var form_urls ={
ach : '{% url "payment-method-ajax" slugs.0 %}',
creditCard : '{% url "payment-method-ajax" slugs.1 %}',
}
function load_payment_form(btn) {
if(btn.innerText==ach) {
get_url = form_urls['ach'];
type = ach;
}
else if(btn.innerText==creditCard) {
console.log('Load credit card form');
get_url = form_urls['creditCard'];
type = creditCard;
}
$.get({'url': get_url}).done(
function(data) {
document.getElementById('form-fields').innerHTML = data;})
document.getElementById("id-form").style.display = "block";
}