DjangoでWebアプリを作っています。
selectで選択した「language」をAjaxでサーバーに送り、サーバーから帰ってきた「type」データをhtmlに表示したいです。
typeはtype_dictという辞書型で帰ってくるのですが、それをどうしたらhtmlに表示できるか分かりません。template側で、forループのようなことができれば、ありがたいのですが。
html
1# template.html 2<div class='json'></div> <!--このdivの間に帰ってきたデータを表示したい--> 3<script type="text/javascript"> 4 $(document).ready(function () { 5 $.ajax({ 6 type: 'get', 7 url: "{% url 'meiboku:ajax_response' %}", 8 dateType: 'json', 9 data: { 10 'language': 'language' /*selectで選択したlanguageをAjaxで送る。*/ 11 } 12 }).done(function (data) { 13 $('div.json').append(data.types); 14 }); 15 }); 16 </script>
python
1# models.py 2 3# 言語を扱うモデル 4class Language(models.Model): 5 language_name = models.CharField(max_length=50) 6 iso_639 = models.CharField(max_length=10) 7 8 def __str__(self): 9 return self.iso_639 10 11 12# 表示対象のモデル 13class Type(models.Model): 14 language = models.ForeignKey(Language, on_delete=models.CASCADE) 15 name = models.CharField(max_length=100) 16 17 def __str__(self): 18 return str(self.type_ja.name) + ' in ' + str(self.language)
python
1# views.py 2 3from django.core import serializers 4from django.http import JsonResponse 5 6# Ajaxを処理 7def ajax_response(request): 8 language = request.GET.get('language') 9 if language: 10 types = Type.objects.filter(language=language).all() 11 types_dict = serializers.serialize('json', types) 12 data = { 13 'types': types_dict, 14 } 15 return JsonResponse(data)
以上の処理を通じて、
htmlの<div class='json'></div>には、
[{"model": "test.type", "pk": 1, "fields": {"language": 2, "name": "sampleA"}}, {"model": "test.type", "pk": 2, "fields": {"language": 2, "name": "sampleB"}}, {"model": "test.type", "pk": 3, "fields": {"language": 2, "name": "sampleC"}}]
という文字列を表示する所まではできました。上記の文字列がそのまま表示されています。
sampleA → Typeモデルのnameに格納
'英語' → Languageモデルのlanguage_nameに格納
sampleB
'英語'
sampleC
'英語'
という表示がしたいです。
(現在、「language:2」と表示されているのは、Languageモデルのidです。)
可能なら、Djangoのテンプレートを使って、
html
1{% for type in types_dict %} 2 {{type.name}}<br> 3 {{type.language}}<hr> 4{% endfor %}
のようなことができればありがたいのですが、Djangoのテンプレートシステムは、サーバー側で処理されるものなので、Ajaxにおいては作動しないと思います。
どのような方法を使えば、Ajaxでサーバーから取ってきたデータを、forループのような形で展開できるでしょうか。
お分かりの方、ご教示頂ければ幸いです。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー