私は、データベースからのすべてのオブジェクトを含むベースリストビュー(cbv .all()クエリで示されているように)を含むホームページを持っています。私がしたかったのは検索フィルターを入れることだったので、後で再利用できるように別の "list.html"フラグメントに分離することをお勧めします。現在、私はcbvに情報を送信するajax呼び出しを持っており、戻り値はlist.htmlフラグメントへのレンダリングです。しかし、私がホームページにアクセスすると、ページはレンダリングされません。CBV(ListView)を使用してAjaxレスポンスDjangoでHTMLフラグメントを更新する
ヘルプまたはアドバイスをいただければ幸いです。ありがとうございました。
urls.pyここ
urlpatterns = [
url(r'^$', exp_view.DrugListView.as_view() , name = 'drug_list')]
である私のCBVテンプレート:ここ
views.py
class DrugListView(ListView):
context_object_name = 'drugs'
model = Drug
template_name = 'expirations/drug_list.html'
def get(self, request):
if self.request.is_ajax():
text_to_search = self.request.GET.get('searchText')
print(text_to_search)
return render(request, "expirations/list.html", {'drug':Drug.objects.filter(name__contains = text_to_search).order_by('name')})
else:
return render(request, "expirations/list.html", {'drug':Drug.objects.all().order_by('name')})
がある drug_list.html
ここでは{% extends 'expirations/index.html' %}
{% block content %}
{% include 'expirations/list.html' %}
{% endblock %}
{% block javascript %}
<script>
$(document).ready(function(){
var input = $("#searchText")
input.keyup(function() {
$.ajax({
type: "GET",
url: "{% url 'drug_list' %}",
data: {'searchText' : input.val()},
success: function(data){
$("#list_view").load("expirations/list.html")
}
})
});
})
</script>
{% endblock %}
するlist.html 次のとおりです。
{% for drug in drugs %}
<div class = '.col-sm-12'>
<ul class = 'list-group'>
<li class = "list-group-item" >
<span class = "badge">First Expiration: {{ drug.early_exp|date:"l M d Y" }}</span>
<a href="{% url 'drug_detail' pk=drug.pk %}">{{ drug.name }}</a>
{% regroup drug.expiration_dates.all by facility as facility_list %}
{% for x in facility_list %}
<span class="label label-info">{{ x.grouper }}</span>
{% endfor %}
</li>
</ul>
</div>
{% endfor %}
これは間違いなく助けになりました。ajaxコールの成功関数の範囲を知るためのガイドがありますか? – user3866172