Django로 블로그 쓰기 (3) views 작성

전편을 이어서 데이터베이스에 있는 내용을 페이지에 반영하면 우리는 큰 성과를 거둘 수 있다.
urls에 있습니다.py에서 설정을 특정한 처리 방법에 비추십시오.
나의 블로그.core.urls.py:
urlpatterns = patterns('',
    (r'root/(?P.*)$',
    'django.views.static.serve',
    {'document_root':
    'D:/Aptana Studio Workspace/blog/views/temp'}),
    (r'^essay/(?P\d+)/$',
    'blog.core.views.essay_details'),
    (r'^search/$','blog.core.views.search'),
    (r'^leavemsg/(?P\d+)/$',
    'blog.core.views.leave_comment'),
    (r'^(?P\d+)/(?P\d+)/$',
    'blog.core.views.index'),
    (r'^latest/feed/$', LatestEntriesFeed()),
    (r'^','blog.core.views.index'),
)
#view.py 위에 비교적 상세한 주석이 있다
from django.shortcuts import render_to_response,get_object_or_404
from blog.core.models import Essay,EssayType,Archive,Comment
from django.core.paginator import Paginator
import datetime
from django.db.models import Q
#   ,pageNo=None,etype=None     urls      
#param      None
def index(request,pageNo=None,etype=None,keyword=None):
    try:
        #        
        pgNo=int(pageNo)
    except:
        pgNo=1
    try:
        etype=int(etype)
    except:
        etype=None  
    if etype:
        #        ,exclude  not in  !=  
        datas=Essay.objects.all().
        filter(eType=etype).
        exclude(title='welcome')  
    elif keyword:
        #       ,title__contains
        #  Sql like %+keyword+%
        #Q    Sql   OR  
        datas=Essay.objects.all().
        get(Q(title__contains=keyword)
        |Q(abstract__contains=keyword))
        .exclude(title='welcome')
    else:
        #      
        datas=Essay.objects.all().exclude(title='welcome')
    #   5   
    recentList=datas[:5]
    #    
    paginator = Paginator(datas, 10)
    if pgNo==0:
        pgNo=1
    if pgNo>paginator.num_pages:
        pgNo=paginator.num_pages
    curPage=paginator.page(pgNo)
    #   mian.html   
    return render_to_response('main.html',{
            'page':curPage,
            'essay_type':EssayType.objects.all(),
            'pcount':paginator.num_pages,
            'recent':recentList,
            'archives':Archive.objects.all(),
            'welcome':Essay.objects.filter(title='welcome')[0]})


#      
def essay_details(request,eid=None):
    #          404  
    essay=get_object_or_404(Essay,id=eid)
    recentList=Essay.objects.all()[:5]
    #    Session
    if request.session.get('e'+str(eid),True):
        request.session['e'+str(eid)]=False
        #       timer  ,          ,
        #timer             
        #      +1
        essay.view_count=essay.view_count+1
        essay.save()
    return render_to_response('details.html',{
              'essay':essay,
              'essay_type':EssayType.objects.all(),
              'archives':Archive.objects.all(),
              'date_format':
     essay.pub_date.strftime('%A %B %d %Y').split(),
              'recent':recentList
                                 })


#             
def search(request):
    if request.method == 'POST':
        # POST          
        key=request.POST.get('keyword',None)
        return index(request,keyword=key)
    else:
        return index(request)
   


#        
def leave_comment(request,eid=None):
    if request.method == 'POST' and eid:
        uname=request.POST.get('uname',None)
        content=request.POST.get('comment',None)
        email=request.POST.get('email',None)
        #      
        if uname and content and email:
            comment=Comment()
            comment.uname=uname
            comment.content=content
            comment.email=email
            comment.pub_date=datetime.datetime.now()
            comment.save()
        return index(request)
    return index(request)
이제 완성
rss 구독 기능이 필요하시면 여기 소개를 보세요.
Django로 블로그 쓰기(4) Rss 구독 작성

좋은 웹페이지 즐겨찾기