날로 먹는 Django 웹 프로그래밍 강좌

목차
  1. 한) 우리가 만들고자 하는 것과 필요한 기술 (1편) - django 강좌 2008년 06월 01일
  2. 날) Django 설치 (2편) - django 강좌 2008년 06월 08일
  3. 은) 블로그 기획 (3편) - django 강좌 2008년 06월 16일
  4. 미) 파이썬 기초 문법과 데이터 모델링 (4편 1/2) - django 강좌 2008년 06월 22일
  5. 미) 파이썬 기초 문법과 데이터 모델링 (4편 2/2) - django 강좌 2008년 06월 30일
  6. 청) 컨트롤러(뷰) - 글 목록과 글 보기 기능 (5편 1/3) - django 강좌 2008년 07월 07일
  7. 청) 컨트롤러(뷰) - 글 쓰기 기능 (5편 2/3) - django 강좌 2008년 07월 14일
  8. 청) 컨트롤러(뷰) - 댓글 기능 (5편 3/3) - django 강좌 2008년 07월 20일
  9. 년) 템플릿 작업과 Ajax 작업 (6편) - django 강좌 2008년 07월 29일
  10. 이) RSS 기능, 로그인 기능 (7편) - django 강좌 2008년 08월 04일
  11. 다) django 강좌를 마치며 (8편) - django 강좌 2008년 08월 10일
  12. Django 1.0에서 Admin 기능 쓰기 - 부록편 2009년 02월 01일

Django 1.0에서 Admin 기능 쓰기 – 부록편

안녕하세요, 한날입니다.

오랜만에 Django 강좌 글로 뵙습니다.

지난 20088월에 강좌 연재를 마친 뒤 얼마 후에 Django 1.0판이 새로 나왔습니다. 꽤 많은 점이 바뀌었더군요. 대체로 이전 정식판인 0.96를 기준으로 개발한 코드라도 잘 작동하는데, 일부 기능은 아예 작동하지 않기도 합니다.

이 연재글은 “날로 먹는 Django 웹 프로그래밍 강좌” 을 보완하여 현재 정식으로 배포되고 있는 Django 1.0판에서 제대로 작동시키는 내용을 담습니다. 또, 본 강좌에서 다루지 않은 내용 일부를 추가하려 합니다. 즉, 새 강좌 연재는 아니고, 부록에 해당하는 것이지요.

그럼 바로 시작하겠습니다.

Admin 영역 사용법 변화

admin.py 만들기

청) 컨트롤러(뷰) – 글 목록과 글 보기 기능 (5편 1/3)”에서 Django의 Admin 영역/기능을 다룹니다. 그런데 1.0판부터 Admin 기능을 쓰는 방법이 크게 바뀌었습니다.

기존에는 각 모델마다 Admin 이라는 클래스를 만들어서 썼습니다.

class Entries(models.Model):
    Title = models.CharField(max_length=80, null=False)

    class Admin:
        pass

이런 식이죠. 하지만, 1.0판부터는 admin.py파일을 따로 만들어야 합니다.참고1)

이 파일은 각 어플리케이션마다 씁니다. 본 강좌에서 우리는 blog 라는 어플리케이션을 만들었는데(manage.py startapp blog), 이 어플리케이션 안에, 그러니까 어플리케이션 디렉토리(폴더) 안에 admin.py 파일을 만들면 됩니다.

admin.py 파일을 만든 뒤 관련 모듈을 가져오겠습니다.

from django.contrib import admin

이 admin 모듈을 써서 Django admin 영역에서 다룰 모델을 등록할 수 있습니다. 바로 admin.site 에 있는 register 메서드, 즉 admin.site.register 로 하는 것이지요.

먼저 Admin 영역에서 다룰 모델을 가져옵니다. 편의상 Entries 를 해보겠습니다.

from hannal.blog.models import Entries

from 경로는 여러분이 어떻게 프로젝트를 만들고 어플리케이션 이름을 지었는지에 따라 다릅니다.

이렇게 가져온 모델을 admin.site.register 로 등록합니다.

admin.site.register(Entries)

이렇게 하면 Django admin 영역에서 Entries 모델을 다룰 수 있습니다.

Admin 영역에서 좀 더 예쁘게 하기

Django admin 영역에서 다룰 모델을 등록하는 것 말고도 화면에 나타나는 영역을 바꿀 수 있습니다. 본 강좌에서는 “admin 영역에서 자료 좀 더 예쁘게 나타내기”라는 단락에 나와있지요. 이 부분도 Django 1.0판에서 조금 바뀌었습니다. Entries 모델을 기준으로 예를 들어서, 우리는 글 번호와 제목, 작성일시만 뜨게 해보겠습니다.

admin.site.register 위에 아래와 같이 클래스를 하나 만듭니다.

class EntriesAdmin(admin.ModelAdmin):
    pass

이 클래스는 Admin 영역에서 Entries 모델을 어떻게 출력하고 다루게 할 것인지에 대한 정보를 담는 역할을 합니다. 자세한 내용은 잠시 뒤에 하기로 하고 우선 pass 로 빈 클래스를 만듭니다.

이 클래스를 방금 admin.site.register 로 Entries 모델을 등록하는 부분에 추가합니다.

admin.site.register(Entries, EntriesAdmin)

이렇게 register 메서드에 두 번째 인자로 넣는 겁니다.

이제 글 번호, 제목, 작성일시가 뜨게 해보겠습니다. 간단합니다. EntriesAdmin 클래스에 아래 내용을 써넣습니다.

list_display = (‘id’, ‘Title’,'created’,)

list_display 라는 클래스 프로퍼티에 튜플 자료형으로 출력할 모델 요소를 문자열로 담는 겁니다. 기존 방법과 같습니다.

class EntriesAdmin(admin.ModelAdmin):
    list_display = ('id', 'Title','created',)

코드는 이렇게 생겼습니다.

이외에도 좀 더 다양한 변화를 줄 수 있습니다. 자세한 내용은 공식 문서(The Django admin site)를 참조하시길 바랍니다.

urls.py 내용 바꾸기

이걸로 끝이면 좋겠는데, urls.py 에서 Admin 영역에 접근하는 방법도 바뀌었습니다.

먼저 urls.py 맨 위에다가

from django.contrib import admin
admin.autodiscover()

를 넣습니다. 그런 뒤 주소 체계는 아래와 같이 넣으면 됩니다.

    (r'^admin/(.*)', admin.site.root),

Django 1.0판에서 프로젝트를 만들면(django-admin.py startproject hannal) 이러한 내용은 이미 반영되어 있으니 크게 어렵진 않을 겁니다.

꼬리표 : , , , ,

이 글보다 좀 더 나중인 글과 좀 더 예전인 글

«« 공자, 주유천하를 떠나다

사회총지식 (Gross Societal Knowledge) »»

댓글 2개 »

  1. 스파이크 님,

    2009년 02월 2일 02시 02분 26초

    좋은 글 잘 읽었습니다. 대신 애매한 부분이 있네요.

    Admin 인터페이스에 모듈을 추가하기 위해서 반드시 admin 파일을 새로 만들 필요는 없습니다. 중요한 변화는 Admin이라는 메타 클래스를 모델 클래스 안에 정의해주는 방식에서 site.register로 등록만 해주면 되는, 좀더 유연한 방식으로 변화했다는 점입니다. 그래서 이 site.register는 models.py 안에서 처리해줘도 무방합니다. 좀더깊이 들어가서 django.db.models.get_models가 읽어들이는 다른 모듈 어디에서든 지정할 수 있습니다.

    참고하시길 바랍니다.

  2. Hannal 님,

    2009년 02월 2일 10시 02분 01초

    아아, 그렇군요! models.py 에서 한다면 더 편하게 모델을 등록할 수 있어 편리할 것 같습니다. 굳이 models.py 를 참조하며 admin.py 를 고치지 않아도 되니 직관성도 좋을 것 같습니다. Admin 기능 쓰는 방법이 admin.py 을 쓰는 형태로 바뀌어서 내심 불만이 있었는데, 스파이크님 덕에 좋은 가르침 받았습니다.
    .
    이 글에도 스파이크님 말씀을 참조할 수 있게 참조를 걸어두었습니다. 고맙습니다. :D

이 글에 달린 댓글을 RSS로 배달 받아보실 수 있습니다.
글걸기(Trackback) 주소 : http://www.hannal.net/think/99_1-python_django_lecture/trackback/

댓글 달기



※ 입력을 해야만하지만 공개하진 않습니다. 꺼림직하다면 a@b.merong 식으로 넣으셔도 됩니다.