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で試しました。
気が向いたらもうちょっとオプションとか試してみる。

