接上篇,现在将数据库里面的内容反映到页面上去,我们就大功告成了,
在urls.py中配置映射到特定的处理方法中去。
我的blog.core.urls.py:
urlpatterns = patterns('',
(r'root/(?P<path>.*)$',
'django.views.static.serve',
{'document_root':
'D:/Aptana Studio Workspace/blog/views/temp'}),
(r'^essay/(?P<eid>\d+)/$',
'blog.core.views.essay_details'),
(r'^search/$','blog.core.views.search'),
(r'^leavemsg/(?P<eid>\d+)/$',
'blog.core.views.leave_comment'),
(r'^(?P<pageNo>\d+)/(?P<etype>\d+)/$',
'blog.core.views.index'),
(r'^latest/feed/$', LatestEntriesFeed()),
(r'^','blog.core.views.index'),
)
#view.py上面有比较详细的注释
在urls.py中配置映射到特定的处理方法中去。
我的blog.core.urls.py:
urlpatterns = patterns('',
(r'root/(?P<path>.*)$',
'django.views.static.serve',
{'document_root':
'D:/Aptana Studio Workspace/blog/views/temp'}),
(r'^essay/(?P<eid>\d+)/$',
'blog.core.views.essay_details'),
(r'^search/$','blog.core.views.search'),
(r'^leavemsg/(?P<eid>\d+)/$',
'blog.core.views.leave_comment'),
(r'^(?P<pageNo>\d+)/(?P<etype>\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订阅功能 请看这里的介绍