BaseFile (Doc)
基础属性
key | 说明 |
---|---|
type | 文档的类型,比如`post`、`image`、`template`、`file`、`folder`、`folder_doc`、`scv` .etc的其中一种 |
path | 文件相对于网站的路径,全小写 |
real_path | 同`path`,但尽可能保留原始的大小写 |
filename | 仅文件名,包含后缀,但是不包含其所在目录的其它路径信息。 |
ext | 文件名后缀,比如`js`、`txt`、`css` .etc |
images_count | 文件夹内包含的所有图片数 (遍历所有子文件夹), 如果是image类型,则恒等于1 |
_images_count | 仅仅 `folder` 类型才有的字段,表示直接所属的文件夹内有多少张图片 |
posts_count | 文件夹内包含的所有文章数 (遍历所有子文件夹), 如果是post类型,则恒等于1 |
_posts_count | 仅仅 `folder` 类型才有的字段,表示**直接所属**的文件夹内有多少篇文章 |
is_dir | True/False, 表示是否是一个文件夹 |
系统属性
如非特别场合,一般用不到。
key | 说明 |
---|---|
id | 文档ID |
version | 文档的版本哈希值 |
site_id | 所属站点的ID |
account_id | 所属账户的ID |
size | 文件大小,类型为`int` |
sys_date | 在Bitcron系统内的最后修改时间 |
复合属性
复合属性
所指的字段,这并非BaseFile上的原始数据,只要在调用的时候才会生效,比如post.category
是能获得有效的category对象,而post.json
进行JSON化时,其中则是没有category这个字段的。
url
返回文档的URL,比如一篇文章详细地址、一张图片的可浏览地址。
raw_file_content
文档本身对应的原始内容。
category
表示文档所在目录对应的文件夹的Category对象。
comments
表示当前文档对应的评论列表,数据类型为list,list内的每个comment为一个dict类型,一般有以下属性:
key | 说明 |
---|---|
author | 评论者的名称 |
date | 评论日期 |
ip | 评论者的IP地址 |
site | 评论者留下的网站地址(可能为空) |
content | 评论的内容 |
评论者的邮箱地址 **(非特殊情况,不要进行曝露!)** |
注意: comments 实际上对应的是一个csv文件,一般在网站的文件管理器内,/_comments/
下能找到对应的评论文件。
comments_as_html
默认自动将comments视觉化,并有提交评论
的表单。
具体的源码实现,可以参见本文末的附
。
附
comments_as_html 的实现
仅做参考,一般不建议重新实现一遍Bitcron的评论机制。
mixin one_comment(comment)
li.comment: .comment_wrapper
.author
if comment.email and account.is_admin_email(comment.email)
author_name = comment.author or site.configs.admin_name or 'Admin'
else
author_name = comment.author
if not author_name and comment.email
author_name = comment.email.split('@')[0]
author_name = author_name or 'Anonymous'
avatar = site.visitor_avatar if comment.author else site.admin_avatar
avatar = account.get_avatar(comment.email, match=True) or avatar
.avatar: img(src=avatar)
.author-name
if comment.site
a(href="{{comment.site or '#'}}", rel="external nofollow")
b= author_name
else
b= author_name
.author-date
small= comment.date("%Y-%m-%d %H:%M:%S")
.comment_content= comment.content.plain_html
+_('Comments', '发表评论', 'zh_cn')
+_('Write a Comment', '撰写评论', 'zh_cn')
+_('Submit!', '提交评论', 'zh_cn')
+_('Name', '昵称', 'zh_cn')
+_('Email', '邮箱', 'zh_cn')
+_('Website', '网站', 'zh_cn')
+h.load('/fb_static/api/comment/style.css')
.doc_comments: .doc_comments_wrapper
.comments_block_title= _('Comments')
form#new_comment_form(method="post", action="/service/comment/new")
input(name="path", type="hidden", value=doc.path)
.comment_trigger
.avatar: img(src=site.visitor_avatar)
.trigger_title= _('Write a Comment')
.new_comment
textarea.textarea_box(name="content",rows="2")
span.comment_error
.comment_triggered: .input_body
if not request.is_login: ul.ident
li: input(type="text", name="author", placeholder=_('Name'))
li: input(type="text", name="email", placeholder=_('Email'))
li: input(type="text", name="site", placeholder=_('Website'))
input.comment_submit_button(type="submit", value=_('Submit!'), class="c_button")
ul.comments: for comment in doc.comments
+one_comment(comment)
+h.load('jquery')
+h.load('/fb_static/lib/js.cookie.js')
+h.load('/fb_static/api/comment/script.js')