使用Mezzanine制作个人BLOG时,进入ADMIN页面会发现只能简单的添加Blog Post, 所有添加的Blog Post都会在Blog这个页面下显示,但实际情况下,我们往往希望将BLOG进行分类,每个分类的Blog在对应的分类目录下显示,那么怎么在Mezzanine中实现这个功能呢,本文将介绍笔者实现的方法。

  • Step1 创建分类目录

分类目录是BLOG目录的子目录,因此,在Admin页面中的BLOG下添加一个Link,命名为想要的子目录,比如我的分类目录叫做"Tech",指定其url为"blog/tech"则可以像下图这样:

  • Step2 使Blog Post和目录相关联

为Post添加Category即可,如下:

  • Step3 点击Tech目录时,在页面上列出Category包含tech的Posts

在Step1中,我们已经指定了Tech目录的url为"blog/tech/",于是我们需要修改urls.py文件,将这个url和我们想要显示的页面对应起来,查阅Mezzanine的文档,关于blog_post_list方法的部分:

mezzanine.blog.views.blog_post_list(request, tag=None, year=None, month=None, username=None, cate
gory=None, template=u'blog/blog_post_list.html', extra_context=None)[source]

Display a list of blog posts that are filtered by tag, year, month, author or category. Custom templates are checked for using the name blog/blog_post_list_XXX.html where XXX is either the category slug or author’s username if given.

再查看该方法的源代码:

def blog_post_list(request, tag=None, year=None, month=None, username=None, category=None,template="blog/blog_post_list.html", extra_context=None): 
""" Display a list of blog posts that are filtered by tag, year, month, author or category. Custom templates are checked for using the name ``blog/blog_post_list_XXX.html`` where ``XXX`` is either the category slug or author's username if given. """ 
templates = [] 
blog_posts = BlogPost.objects.published(for_user=request.user) 
if tag is not None: 
  tag = get_object_or_404(Keyword, slug=tag) 
  blog_posts = blog_posts.filter(keywords__keyword=tag) 
if year is not None: 
  blog_posts = blog_posts.filter(publish_date__year=year) 
if month is not None: 
  blog_posts = blog_posts.filter(publish_date__month=month) 
  try: 
    month = month_name[int(month)] 
  except IndexError: 
    raise Http404() 
if category is not None: 
  category = get_object_or_404(BlogCategory, slug=category) 
  blog_posts = blog_posts.filter(categories=category) 
  templates.append(u"blog/blog_post_list_%s.html" % str(category.slug)) 
  author = None 
if username is not None: 
  author = get_object_or_404(User, username=username) 
  blog_posts = blog_posts.filter(user=author) templates.append(u"blog/blog_post_list_%s.html"% username) 
  
prefetch = ("categories", "keywords__keyword") 
blog_posts = blog_posts.select_related("user").prefetch_related(*prefetch) 
blog_posts = paginate(blog_posts, request.GET.get("page", 1), settings.BLOG_POST_PER_PAGE,settings.MAX_PAGING_LINKS) 
context = {"blog_posts": blog_posts, "year": year, "month": month, "tag": tag, "category":category, "author": author} 
context.update(extra_context or {}) templates.append(template) 
return render(request, templates, context)

可以知道我们可以通过多种方法来筛选Posts(在本例中笔者选择使用Category来筛选),在urls.py中,在"url("^", include("mezzanine.urls")),"这个条目之前添加:

url("^blog/tech/$",blog_post_list,{"category":"tech"}),

将"blog/tech/"定向到blog/blog_post_list_tech.html模板,记住一定要在"url("^", include("mezzanine.urls")),"之前添加,因为urls.py文件也是python脚本,从上到下执行,如果先找到"url("^", include("mezzanine.urls")),"这一条目,则会按照mezzanine.urls中的内容去定向页面,从而认为blog/tech/指向的是一个Blog Post,而我们并不存在一个叫做tech的Blog Post,则会发生404错误。

这样,当我们点击Tech目录时,就可以列出所有category包含tech的Blog Post了。

  • Step4 重定义默认的Blog页面

默认情况下,点击Blog目录时会列出所有的Blog Posts,而当我们有了子目录后,并不希望点击BLOG时再列出所有的Blog Post, 这时我们可以自定义想要的Blog页面,比如我想让Blog页面直接显示为一个richtextpage,则我们可以在urls.py中添加一行,然后再在admin页面中编辑他的内容即可,如添加一些对每个分类的描述等:

url("^blog/$",direct_to_template,{"template":"pages/richtextpage.html"}),

注意,也必须在"url("^", include("mezzanine.urls")),"这一条之前添加,否则就会默认显示所有的Blog Post。

Mezzanine怎样为BLOG创建分级目录相关推荐

  1. CakePHP中文手册【翻译】-Cake Blog创建指南

    Cake Blog创建指南 第1节 介绍 欢迎来到Cake.你可能正在使用本指南,因为你想学习更多关于Cake是如何工作的知识.其目的就是为了提高效率,并且让编写代码变得更加有趣.我们希望当你深入代码 ...

  2. 【Confluence】创建分级文件目录

    需求 在confluence文档中构建如下图所示的分级目录文件. 解决 首先在该目录下创建一个文件,确定好位置! 创建好之后,在该创建好的文件下在重复创建文件即可!

  3. 【shell】创建长目录,目录存在则忽略,缺失则创建

    有时候,我们需要创建一个空目录树,如果给定路径包含目录,那么还必须检查这些目录是否存在: mkdir –p /qinys/oliver/tmp/ 执行上述命令即可创建长目录,并且有则忽略,无则创建原则 ...

  4. Go 学习笔记(49)— Go 标准库之 io/ioutil(读写文件、获取目录下的文件和子目录、创建临时目录和文件)

    1. 简要概述 import "io/ioutil" 包 io/ioutil 实现一些 I/O 实用程序函数. 2. 相关函数 2.1 func ReadAll func Read ...

  5. xp创建虚拟服务器,Xp系统怎么创建虚拟目录?Xp系统创建虚拟目录的方法

    Xp系统怎么创建虚拟目录?xp系统是一款非常经典的windows系统,其一直深受着广大用户们的喜爱.虽然目前微软不在支持xp系统了但是使用还是有部分用户选择使用xp系统.下面小编就给大家带来Xp系统创 ...

  6. php创建多级目录完整封装类操作

    创建多级目录函数中调用创建指定下的指定文件的函数: public function create_dir($dir,$mode=0777){return is_dir($dir) or ($this- ...

  7. -mkdir 创建目录 Usage:hdfs dfs -mkdir [-p] < paths> 选项:-p 很像Unix mkdir -p,沿路径创建父目录。

    1 -mkdir 创建目录 Usage:hdfs dfs -mkdir [-p] < paths> 选项:-p 很像Unix mkdir -p,沿路径创建父目录. 1,-mkdir 创建目 ...

  8. vim 如何出创建工程目录

    :r!(bash) #其实其中bash命令代表你要输入的命令,所以你可以创建一个目录利用shell命令

  9. mkdir创建递归目录

    转载自:https://www.cnblogs.com/lovebing/p/9805864.html linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限, ...

最新文章

  1. python基础语法有哪些-Python基础语法一
  2. Ubuntu上常用快捷键使用
  3. 图解Oracle用户管理
  4. 谈谈集群NAS在VDI存储中的应用
  5. (9) ebj学习: Jpa的增删查改,CURD方法监听和命名查询
  6. java打印整个向量_Java中Vector向量的用法
  7. 魅蓝s6启动android密码_魅蓝s6怎么恢复出厂设置?忘记密码怎么办
  8. [转载]Netvault:操作Informix APM将A机备份的数据恢复到B机
  9. 牛客网练习赛26B(简单的dp)
  10. 二进制的原码,反码,补码
  11. 手机桌面隐藏大师_【应用隐藏大师app】应用隐藏大师安卓版_应用隐藏大师手机版下载v2.8.1 - 绿点安卓网...
  12. 配色三部曲-你真懂这些色彩术语吗?
  13. 纽博涛在CSDN上开通博客啦
  14. 安卓实现APP自动检测软件版本并提示更新
  15. 网盘直链下载助手 暗号破解
  16. python可视化之matplotlib绘图--蜘蛛侠钢铁侠(组合分区绘图)
  17. 初学者笔记:Scanf间隔符号的使用
  18. datadog 全观测性初体验
  19. 普特英语听力——前言
  20. BigCommerce vs WooCommerce –哪个更好? (比较)

热门文章

  1. 八年级上学期计算机教学计划,第一学期七八年级信息技术教学计划
  2. UG NX二次开发(C#)-建模-获取曲面的法矢
  3. Podium Vue客户端组件库
  4. PS技巧---提取线稿
  5. 网络游戏中玩家在线数据的存取
  6. winform pdf转图片.jpg或.png(O2S.Components.PDFRender4NET)
  7. 豆瓣超高评分《扫黑风暴》热评爬取可视化展示
  8. 沈园恋之沈园诗,自创诗
  9. 利用PYTHON连接阿里云物联网平台
  10. python爬虫分析豆瓣中最新电影的影评