DjangoのJSONデータ生成処理も、jQueryのタグ生成処理もなかなか使いやすい。
jQueryでサーバサイドを呼びだし、サーバサイドでDjangoでModelのリストを
JSON化してクライアントに返し、それをselectタグ内のoptionタグとして生成する。
views.py
from django.core import serializers from django.http import HttpResponse from testapp.main.models import * ... def models_reload(request): model_list = Model.objects.all() data = serializers.serialize("json", model_list[:30], ensure_ascii=False) return HttpResponse(data, mimetype="text/javascript")
select.html
{% extends "user/base.html" %} {% block additional_js %} <script type="text/javascript" src="/static/javascripts/jquery-1.1.3.1.pack.js"></script> <script type="text/javascript"> function reloadModels() { $("#id_models").empty(); $.ajax({ type: "GET", url: "/models/reload/", data: {}, dataType: "json", success: function(response) { $.each(response, function(i) { model = this; row = "<option value='" + model.pk + "'>"; row += model.fields.name; row += "</option>"; $(row).appendTo("#id_models"); }); } }); } $(function() { reloadPlaces(); }); </script> {% endblock %} {% block main_content %} <select size="8" id="id_models" name="model" style="width: 500px;"></select> {% endblock %}
jQueryの$.ajaxをPOSTで使用する場合や$.post関数を使用する場合、
パラメータ付でサーバサイドを呼び出すとIEでうまく動作しないようだ。
Firefoxでは動く。解決法が分かるまでGETで処理しておく。