DjangoでCRUDを作る手順を示します。
$ django-admin.py startproject test_project $ cd test_project $ python manage.py startapp linktracker
を参照してください。
from django.db import models
# Create your models here.
class Link (models.Model):
link_description = models.CharField(max_length=200)
link_url = models.CharField(max_length=200)
$ python manage.py syncdb Creating table linktracker_link
INSTALLED_APPS = (
'test_project.linktracker', # 追加
)
*urls.pyに8行追加
{{{
urlpatterns = patterns('',
...
(r'^links/$', 'test_project.linktracker.views.list') , # 追加(トップページ)
(r'^links/list$', 'test_project.linktracker.views.list') , # 追加(一覧ページ)
(r'^links/list/(?P<page>\d+)', 'test_project.linktracker.views.list') , # 追加(一覧ページャ)
(r'^links/show/(?P<id>\d+)', 'test_project.linktracker.views.show'), # 追加(パーマリンク)
(r'^links/add', 'test_project.linktracker.views.add'), # 追加(新規作成)
(r'^links/edit/(?P<id>\d+)', 'test_project.linktracker.views.edit'), # 追加(編集ページ)
(r'^links/delete/(?P<id>\d+)', 'test_project.linktracker.views.delete'), # 追加(削除アクション)
(r'^links/update/', 'test_project.linktracker.views.update'), # 追加(POSTアクション)
)
from django.core.paginator import Paginator
from test_project.linktracker.models import Link
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def list(request, page = 1):
page = int(page)
link_list = Paginator(Link.objects.all(), 5)
p = link_list.page(page)
return render_to_response('linktracker/list.html',{
'link_list': p.object_list,
'has_first': 2 < page,
'first_page': 1,
'has_last': page + 1 < link_list._get_num_pages(),
'last_page': link_list._get_num_pages(),
'has_previous': p.has_previous(),
'previous_page': page - 1,
'has_next': p.has_next(),
'next_page': page + 1,
})
def show(request, id):
link = get_object_or_404(Link, pk=id)
return render_to_response(
'linktracker/show.html',{
'link': link,
}
)
def add(request):
return render_to_response(
'linktracker/edit.html'
)
def edit(request, id):
link = get_object_or_404(Link, pk=id)
return render_to_response(
'linktracker/edit.html'
)
def update(request):
id = request.POST["id"]
if id:
link = get_object_or_404(Link, pk=id)
else:
link = Link()
link.link_description = request.POST["link_description"]
link.link_url = request.POST["link_url"]
link.save()
return HttpResponseRedirect('/links/show/'+str(link.id))
def delete(request, id):
Link.objects.get(id=id).delete()
return HttpResponseRedirect('/links/list')
<h1>Links</h1>
<a href='/links/add'>Create</a>
<table>
<tr>
<th>
Id:
</th>
<th>
Description:
</th>
<th>
Url:
</th>
</tr>
{% for link in link_list %}
<tr>
<td>
<a href="/links/show/{{ link.id }}">{{ link.id }}</a>
</td>
<td>
{{ link.link_description }}
</td>
<td>
<a href="{{ link.link_url }}">{{ link.link_url }}</a>
</td>
</tr>
{% endfor %}
</table>
{% if has_first %}
<a href='/links/list/{{ first_page }}'><<</a>
{% endif %}
{% if has_previous %}
<a href='/links/list/{{ previous_page }}'><prev</a>
{% endif %}
|
{% if has_next %}
<a href='/links/list/{{ next_page }}'>next></a>
{% endif %}
{% if has_last %}
<a href='/links/list/{{ last_page }}'>>></a>
{% endif %}<h1>Link Show</h1>
<table>
<tr>
<th>
Id:
</th>
<td>
{{ link.id }}
</td>
</tr>
<tr>
<th>
Description:
</th>
<td>
{{ link.link_description }}
</td>
</tr>
<tr>
<th>
Url:
</th>
<td>
<a href="{{ link.link_url }}">{{ link.link_url }}</a>
</td>
</tr>
</table>
<a href='/links/edit/{{ link.id }}'>edit</a>
<a href='/links/delete/{{ link.id }}'>delete</a>
<a href='/links/'>list</a><h1>Link Edit</h1>
<form action='/links/update/' method='post'>
<input type="hidden" name="id" value="{{ link.id }}">
<table>
<tr>
<th>
Description:
</th>
<td>
<input name=link_description value="{{ link.link_description|escape}}">
</td>
</tr>
<tr>
<th>
Url:
</th>
<td>
<input name=link_url value="{{ link.link_url|escape }}">
</td>
</tr>
</table>
<input type=submit value="Save">
<a href="/links/show/{{ link.id }}">Cancel</a>
</form>
タグ : ページャ Django Paginator symfony generate-crud propel edit list show

