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のオブジェクトを適当に作ってアクセスしてみます。

/address_show/1/

superuserでログイン状態だと、表示項目のダブルクリックで編集できるようになります。


動いた。
ちなみにdjango 1.5で試しました。
気が向いたらもうちょっとオプションとか試してみる。