django 일반 보기 만들기

3212 단어 django
일반 뷰 작성
 
우리 코드의 공통점을 추출하는 것은 매우 좋은 프로그래밍 습관이다.예를 들어, 다음 두 개의 Python 함수와 같습니다.
 
 
def say_hello(person_name):
    print 'Hello, %s' % person_name

def say_goodbye(person_name):
    print 'Goodbye, %s' % person_name

우리는 인사말을 추출하여 하나의 매개 변수로 만들 수 있다.
 
 
def greet(person_name, greeting):
    print '%s, %s' % (greeting, person_name)

추가 URLconf 매개 변수를 사용하면 같은 생각을 Django의 보기에 적용할 수 있습니다.
 
 
이것을 이해한 후에 너는 고추상적인 시도를 창작하기 시작할 수 있다.더욱 구체적으로 말하자면, 예를 들어 이 보기는 일련의 이벤트 대상을 나타내고, 그 보기는 일련의 BlogEntry 대상을 나타내며, 그것들은 모두 일련의 대상을 나타내는 보기의 특례이며, 대상의 유형은 사실 하나의 변수임을 의식한다.
 
 
이 코드를 예로 들면 다음과 같습니다.
 
 
# urls.py

from django.conf.urls.defaults import *
from mysite import views

urlpatterns = patterns('',
    (r'^events/$', views.event_list),
    (r'^blog/entries/$', views.entry_list),
)

# views.py

from django.shortcuts import render_to_response
from mysite.models import Event, BlogEntry

def event_list(request):
    obj_list = Event.objects.all()
    return render_to_response('mysite/event_list.html', {'event_list': obj_list})

def entry_list(request):
    obj_list = BlogEntry.objects.all()
    return render_to_response('mysite/blogentry_list.html', {'entry_list': obj_list})

이 두 보기가 하는 일은 실질적으로 같다. 일련의 대상을 보여주는 것이다.표시되는 객체의 유형을 추상화합니다.
 
 
# urls.py

from django.conf.urls.defaults import *
from mysite import models, views

urlpatterns = patterns('',
    (r'^events/$', views.object_list, {'model': models.Event}),
    (r'^blog/entries/$', views.object_list, {'model': models.BlogEntry}),
)

# views.py

from django.shortcuts import render_to_response

def object_list(request, model):
    obj_list = model.objects.all()
    template_name = 'mysite/%s_list.html' % model.__name__.lower()
    return render_to_response(template_name, {'object_list': obj_list})

이렇게 작은 변동으로 우리는 갑자기 우리가 다시 사용할 수 있는, 모델과 무관한 보기가 있다는 것을 발견했다!지금부터 일련의 대상을 보여주기 위한 보기가 필요할 때, 우리는 간단명료하게 이objectlist 보기, 보기 코드를 따로 쓸 필요가 없습니다.다음은 우리가 한 일이다.
 
 
우리는 모델 매개 변수를 통해 모델 종류를 직접 전달했다.추가 URLconf 매개변수의 사전은 문자열뿐만 아니라 모든 유형의 객체를 전달할 수 있습니다.
 
 
 
 

이 줄:모델.objects.all ()는 오리가 정한 것이다.
6
 
 
 

모델. 사용name__.lower () 로 템플릿의 이름을 결정합니다.Python의 클래스마다name__ 속성이 클래스 이름을 되돌려줍니다.이 특성은 우리가 실행할 때가 되어서야 대상 유형을 알 수 있는 상황에서 매우 유용하다.예를 들어, BlogEntry 클래스의name__ 바로 문자열'BlogEntry'입니다.
 
 
 
 

이 예는 앞의 예와 약간 다르다. 우리는 템플릿에 통용되는 변수 이름을 전달했다.물론 저희가 쉽게 이 변수명을blogentry 로 바꿀 수 있어요.list 또는 이벤트list, 하지만 우리는 이것을 연습으로 삼아 독자에게 남겨 두려고 합니다.
3
 
 
 

데이터베이스로 구동되는 사이트는 모두 통용되는 모델이 있기 때문에 Django는 통용적인 보기의 집합을 제공합니다. 이 집합을 사용하면 당신의 시간을 절약할 수 있습니다.우리는 다음 장에서 Django의 내장된 유니버설 보기에 대해 이야기할 것이다.

좋은 웹페이지 즐겨찾기