使用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. HTML-加速、再加速
  2. 未来黑客入侵的不仅有电脑,还有人脑?
  3. R语言ggplot2可视化在时间序列上标注出重点区域实战(突出特定的时间范围):highlight specific time ranges
  4. php迭代器作用,PHP迭代器介绍
  5. 如何使用 Node 后端创建 React 应用程序:完整指南
  6. 计算机字体原理,字体图标生成原理(1)
  7. 软件测试和软件质量保证的关系是什么,软件测试与软件质量关系的概述
  8. python set去重
  9. 计算机英语摘要,计算机专业英语摘要.ppt
  10. H-蛇皮走位(吉首大学2019程序设计校赛)c++
  11. python3 证件照批量换背景
  12. codeforces 863B Kayaking
  13. 2017Final 圆周率山
  14. android串口开发!一年后斩获腾讯T3,附面试题答案
  15. Android多窗口模式(分屏模式)
  16. c语言把数字转换为字母,c语言输入数字变成字母
  17. 【干货】富人思维:硅谷天使投资人1000倍投资回报的决策和投资模型.pdf(附下载链接)...
  18. 【转】关于usr/bin/ld: cannot find -lxxx问题总结
  19. NLP学习(一)基础篇
  20. 软件设计的不同模型:瀑布式、快速原型法、迭代式(敏捷)

热门文章

  1. 四个好看的CSS样式表格
  2. 利用一般处理程序处理头像的浏览和更新
  3. 干货 | SQL 进阶技巧
  4. 模型评估与改进(三)// 评估指标
  5. 使用XMind打开.mmap文件不显示问题
  6. docker 搭建frp内网穿透以及frp详细使用
  7. 创建一个DAPP的全流程
  8. easyexcel结合zip 导出压缩文件(包含多个excel)
  9. 员工信息表,增删查改程序
  10. 关于博客封面的提取与处理