Home >  > Django 教程之十:RSS和分页

Django 教程之十:RSS和分页

0

一、RSS功能

Django是一个全面型框架, 很多功能都可以直接找到, 对于RSS功能, 可以从其中的高层框架的聚合Feed框架中找到(The syndication feed framework)

上层Feed生成框架可以直接应用Feed类, 我们可以直接继承Feed在其中定义自己的方法。

1、定义类

在my_blog/article/views.py中定义类,加入下面两段代码:

from django.contrib.syndication.views import Feed 
class RSSFeed(Feed) :
    title = "RSS feed - article"
    link = "feeds/posts/"
    description = "RSS feed - blog posts"

    def items(self):
        return Article.objects.order_by('-date_time')

    def item_title(self, item):
        return item.title

    def item_pubdate(self, item):
        return item.date_time

    def item_description(self, item):
        return item.content

2、设置url
在my_blog/my_blog/urls.py中设置对应的url,添加如下二行代码:

from article.views import RSSFeed
url(r'^feed/$', RSSFeed(), name = "RSS"),

添加后的效果图:
Snap18254

3、添加RSS按钮
修改my_blog/templates/base.html, 在其中添加RSS按钮,添加如下代码:


<li class="nav-item">
    <a class="button-success pure-button" href="{% url 'RSS' %}">RSS</a>  
 </li>

添加后的效果图:
Snap18253
4、测试效果
保存后, 在浏览器中输入http://localhost:9000可以看到新增的RSS按钮, 点击看以看到对应的效果。

Snap18255

二、分页功能
分页功能是博客上必须的功能之一,试想一下,如果你的博客有上百篇文章,你想让它都显示在一页么?

下面我们就来实现分页的功能,在这个实例中我们设定每页显示2篇文章,实际运用时大家可以根据需要设定每页显示文章的数量。

1、修改views.py

修改my_blog/article/views.py中的home函数,首先导入模关模块:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 

然后将home函数修改成如下形式:

def home(request):
    posts = Article.objects.all()  #获取全部的Article对象
    paginator = Paginator(posts, 2) #每页显示两个
    page = request.GET.get('page')
    try :
        post_list = paginator.page(page)
    except PageNotAnInteger :
        post_list = paginator.page(1)
    except EmptyPage :
        post_list = paginator.paginator(paginator.num_pages)
    return render(request, 'home.html', {'post_list' : post_list})

修改后的效果

Snap18258
2、修改home.html模板文件
修改my_blog/templates下的home.html,加入以下代码:

    {% if post_list.object_list and post_list.paginator.num_pages > 1 %}


<div>


<ul class="pager">
      {% if post_list.has_previous %}


<li><a href="?page={{ post_list.previous_page_number }}">Pre Page</a></li>


      {% endif %}

      {% if post_list.has_next %}


<li><a href="?page={{ post_list.next_page_number }}">Next Page</a></li>


      {% endif %}
      </ul>


      </div>


    {% endif %}

修改后的效果:

Snap18257
3、查看成果
通过命令启动web服务,在浏览器中输入http://localhost:9000/,可以看到首页只显示两篇文章,在最下面有新增的“Next Page”按钮, 点击即可进入到下一页。

Snap18259

三、实验总结

终于!我们完成了一个博客的基本内容。我们完成的功能:

  1. Django-bootstrap-admin优化后台管理, Pure只做前端
  2. markdown和代码高亮
  3. aboutme功能建设完成
  4. 分类
  5. 标签(需要完善)
  6. 归档
  7. 搜索
  8. read more功能
  9. RSS功能
  10. 分页功能

博客基本建好了, 未来我们还有更多的工作要做:

  1. 将view封装到类中
  2. 重写增删改查代码
  3. 重写前段模板
  4. 重新设计数据库关系
  5. 自定义留言板(连接数据库)
  6. 添加注册/登陆功能(Form)
  7. 做成社区(更多设计思考)

Django 教程

Django 教程之一:创建网站项目

Django 教程之二:数据库、后台

Django 教程之三:模板的工作机制

Django 教程之四:创建模板

Django 教程之五:动态URL

Django 教程之六:Markdown和代码高亮

Django 教程之七:添加评论系统

Django 教程之八:博客的归档及其他页面

Django 教程之九:搜索和ReadMore

Django 教程之十:RSS和分页

Django 教程之十一:创建自己的模板

Django 教程之十二:修改导航栏

Django 教程之十三:改进分页功能

Django 教程之十四:服务器篇

Django 教程之十五:上传代码

Django 教程之十六:配置网站

原载:蜗牛博客
网址:http://www.snailtoday.com
尊重版权,转载时务必以链接形式注明作者和原始出处及本声明。

暧昧帖

本文暂无标签

发表评论

*

*