在我的forms.py中我有
class CollegeForm(forms.ModelForm):
collegeName = forms.ModelChoiceField(label='Select College', queryset=College.objects.all(), widget=forms.Select(attrs={'class': 'form-control'}))
class Meta:
model = College
fields = ('collegeName',)
在我的views.py中,
if(request.method =='POST'):
college_form = CollegeForm(request.POST)
else:
college_form = CollegeForm()
return render(request, 'market/product_list.html',{'college_form': college_form})
在我的product_list.html文件中,我有
<div class="col-md-4">
{{ college_form.as_p }}
</div>
我想根据用户从下拉列表中选择的内容动态更新页面内容。有没有办法通过进行Ajax调用?如果是,怎么样?
答案 0 :(得分:0)
简短的回答是肯定的。但这在很大程度上取决于你想要做的事情。
根据您要更改的页面数量以及以何种方式更改...您可能不需要ajax调用..您可以在初始请求中发送数据并使用javascript更新页面具体方式。
如果每个选项都有大量数据,那么每次进行新选择时,您都可以采用非常简单的方式进行页面加载。 (这里的用户体验有点笨拙,但它可以有效)。
最后,如果您有大量数据并希望获得光滑的体验,则可以使用a
。您需要有一个端点,根据选择为您提供必要的数据。如果你走这条路线我推荐使用像jquery这样的javascript框架。以下是ajax call。
以下是ajax解决方案的示例。这只是一个大纲,假设您正在使用ajax
。还有一些细节将取决于具体实施:
您的新views.py:
jquery
对product_list.html的更改:
import json
from django.shortcuts import render
from django.http import HttpResponse
from forms import CollegeForm
from models import CollegeInfo
def original_endpoint(request):
# ...
if request.method == 'POST':
college_form = CollegeForm(request.POST)
else:
college_form = CollegeForm()
return render(request, 'market/product_list.html', {'college_form': college_form})
def college_data_endpoint(request, college_name):
"""
Endpoint for sending back college-specific data
Response sent back in json format to make for easier processing with javascript
"""
# Get college-specific data from the db
college = CollegeInfo.objects.get(id=college_name)
# format it
response_data = {
'field1': college.field1,
'field2': college.field2
}
return HttpResponse(json.dumps(response_data), content_type='application/json')