现在的位置: 首页 > 综合 > 正文

Pinax源代码分析8 - blog

2013年10月20日 ⁄ 综合 ⁄ 共 2148字 ⁄ 字号 评论关闭

Pinax源代码分析8 blog

博客 app

url

    (r'^blog/', include('blog.urls')),

逻辑与模板

url(r'^post/(?P<username>[-/w]+)/(?P<year>/d{4})/(?P<month>/d{2})/(?P<slug>[-/w]+)/$', 'blog.views.post', name='blog_post'),

post view 负责显示一篇博客文章。
post
模板

{% extends "blog/base.html" %}

{% load comments_tag %}
{% load tagging_tags %}
{% load blog %}
{% load blog_tags %}

{% block extra_head %}
    <link rel="alternate" type="application/atom+xml" title="Blog Post Feed for All Users" href="/feeds/posts/all/" />
    <link rel="alternate" type="application/atom+xml" title="Blog Post Feed for User {{ post.author.username }}" href="/feeds/posts/only/{{ post.author.username }}/" />
{% endblock %}

        <div class="blog-tags">
            {% tags_for_object post as tags %}
            {% for tag in tags %}
                <a href="/tags/{{ tag }}">{{ tag }}</a>
            {% endfor %}</p>
        </div>
        {% render_content post 'body' %}
    <h3>Comments on This Post:</h3>
    {% comments post %}

于之前的app类似,post会扩展本app base.html 并且base的主要任务也是提供子导航。

comments_tag misc app 中定义,但是使用的是threadedcomments的模板'threadedcomments/comments.html'。从comments.html可以看出,它依赖于uni_formpaginationavatar

tagging_tags tagging app 中定义,这里使用的是 tags_for_object 标签。

blog blog_tags 都是 blog app 本身定义的标签。render_content 来自 blog.py,使用的是 'wiki/article_content.html' 模板,模板所使用的自定义标签都是使用的wiki app 自己定义的,所以不会以来其它的app了。感觉这里不太合理,blog 这个 app 应用了wiki的模板,模板标签等等,严重的couple了。

blogs

url(r'^$', 'blog.views.blogs', name="blog_list_all"),
url(r'^posts/(?P<username>/w+)/$', 'blog.views.blogs', name='blog_list_user'),

blogs view 负责显示一个 post 列表。

{% load extra_tagging_tags %}
{% load blog_tags %}
            {% for blog_post in blogs %}
                {% show_blog_post blog_post %}
            {% endfor %}

extra_tagging_tags 并不是第三方app提供的,它是项目目录下,tag_app 的自定义标签。
show_blog_post
blog app 本身定义,它使用 "blog/blog_item.html" 模板。

操作

url(r'^your_posts/$', 'blog.views.your_posts', name='blog_list_yours'),
your_posts view
显示一个用户的所有posts

url(r'^new/$', 'blog.views.new', name='blog_new'),
new view
负责新建一篇post

url(r'^edit/(/d+)/$', 'blog.views.edit', name='blog_edit'),
edit view
修改一篇post

url(r'^destroy/(/d+)/$', 'blog.views.destroy', name='blog_destroy')
destroy view
删除一篇post

问题

1.Pinax的博客是基于slug field来获取一篇文章的,但是要求 slug 域对于中文用户无疑是一个巨大的阻碍。
2.
数据库存储的是原文和编码方式,然后在显示文章的时候在对内容进行转换。性能考虑,是不是应该存储HTML呢?
3.
使用wiki app的模板,个人认为是严重的设计失误。

抱歉!评论已关闭.