djangoでインライン編集が可能になるdjango-inplaceeditを使ってみる
オブジェクトの情報を表示するページでそのまま、インラインでデータの更新が可能になるdjango-inplaceeditなるものを試してみました。
django-inplaceedit 0.94 : Python Package Index
インストール
pip install django-inplaceedit
いろいろ設定します
settings.py
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'inplaceeditform' # 追加 ) # global_settings.pyから持ってきて TEMPLATE_CONTEXT_PROCESSORS = ( 'django.contrib.auth.context_processors.auth', 'django.core.context_processors.debug', 'django.core.context_processors.i18n', 'django.core.context_processors.media', 'django.core.context_processors.static', 'django.core.context_processors.tz', 'django.core.context_processors.request', # コメントアウト 'django.contrib.messages.context_processors.messages', )
jqueryが必要です。{%inplace_static%}の前に読み込んでおかないとエラーになります。
base.html
{% load inplace_edit %} <!DOCTYPE html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> {% inplace_static %} </head> <body> {% block content %} {% endblock %} </body> </html>
データ更新用のurlを追加します。
urls.py
url(r'^inplaceeditform/', include('inplaceeditform.urls')),
これで準備OKなので、オブジェクトを表示するViewを作ります。
# models.py from django_localflavor_jp.jp_prefectures import JP_PREFECTURES class Address(models.Model): name = models.CharField(max_length=100) prefecture = models.CharField(max_length=100, choices=JP_PREFECTURES) address = models.CharField(max_length=100, blank=True, null=True) # views.py from django.views.generic import DetailView, class AddressShowView(DetailView): model = Address template_name = 'apps/address_show.html' context_object_name = 'address' # urls.py from django.contrib.auth.views import login ... url(r'^address_show/(?P<pk>\d+?)/?$', AddressShowView.as_view(), name='address_show'), url(r'^login/?$', login, {'template_name': 'apps/login.html'}, name='login'),
superuserでログインしていないと使えないのでloginできるようにしておきます。
apps/address_show.html
{% extends 'base.html' %} {% load inplace_edit %} {% block content %} <div id="content"> <p>{% inplace_edit "address.name" %}</p> <p>{% inplace_edit "address.prefecture" %}</p> <p>{% inplace_edit "address.address" %}</p> </div> {% endblock %}
apps/login.html
<form method="POST">{% csrf_token %} {{ form.as_ul }} <input type="submit"> </form>
これで準備OK。
addressのオブジェクトを適当に作ってアクセスしてみます。
superuserでログイン状態だと、表示項目のダブルクリックで編集できるようになります。
動いた。
ちなみにdjango 1.5で試しました。
気が向いたらもうちょっとオプションとか試してみる。