[django]使用内置的 comments 实现评论功能

安装 comments 应用

  1. 编辑 settings 文件,INSTALLED_APPS 项添加 'django.contrib.comments',

    INSTALLED_APPS = (
        # ...
        'django.contrib.comments',
        # ...
    )
    
  2. 执行 python manage.py syncdb 创建评论表。

  3. 编辑 urls.py 文件,添加评论相关的 url:

    urlpatterns = patterns('',
        # ...
        url(r'^comments/', include('django.contrib.comments.urls')),
        # ...
    )
    

示例 views

def display_topic(request, topic_id):
    topic = Topic.objects.get(id=topic_id)
    return ...
more ...

[django]使用 Paginator 实现分页功能

在 django 中使用 Paginator 可以很方便的实现分页功能,下面就通过一个具体的例子来讲讲如何使用 Paginator。

在 view 中使用 Paginator

from django.core.paginator import Paginator
from django.core.paginator import EmptyPage
from django.core.paginator import PageNotAnInteger
from hello.models import Topic


def index(request):
    limit = 3  # 每页显示的记录数
    topics = Topic.objects.all()
    paginator = Paginator(topics, limit)  # 实例化一个分页对象

    page ...
more ...

[django]使用自定义 context processor 实现模板全局变量

本文使用的是 django 1.4.3。

写一个 context processor 函数

可以把这个函数放在项目的任何地方,本文是放在应用目录下的 context_processors.py 文件中:

from hello.models import Category


def categories(request):  # 只有一个参数(HttpRequeset 对象)
    all_categories = Category.objects.all()
    context = {'categories': all_categories}

    return context  # 返回值必须是个字典

注意:context processor 函数只有一个参数,即 HttpRequest 对象,并且函数的返回值必须是个字典。

修改 settings 文件

修改 TEMPLATE_CONTEXT_PROCESSORS 选项值,添加新建的 ...

more ...

[firefox]在地址栏使用通配符过滤书签及历史记录

通过在地址栏使用相应的通配符从而实现只搜索书签或历史记录的功能。

打开 about:config 搜索 urlbar

about:config urlbar

从上图可以看出,默认情况下相关通配符的功能如下:

browser.urlbar.match.title            #      只匹配标题
browser.urlbar.match.url              @      只匹配 URL
browser.urlbar.restrict.bookmark      *      只搜索书签
browser.urlbar.restrict.history       ^      只搜索历史记录
browser.urlbar.restrict.openpage      %      只搜索所有打开的标签页
browser.urlbar.restrict.tag           +      只搜索标签
browser.urlbar.restrict.typed         ~      只搜索曾经在地址栏输入过的记录(URL + 标题)

例如,只搜索标题包含 firefox 的记录 ...

more ...

[django] Variables and attributes may not begin with underscores

当尝试在模板中调用以下划线开头的对象时,会报如下类似错误:

TemplateSyntaxError at /

Variables and attributes may not begin with underscores: 'user._meta.get_field('name').help_text'

解决方法就是,将调用以下划线开头的对象的操作封装到模板过滤器中。

如何创建自定义模板过滤器

在 models.py 文件所在目录新建一个 templatetags 目录:

hello/
    models.py
    templatetags/
        hello_extras.py
        __init__.py
    views.py

hello_extras.py 中保存着我们自定义的模板过滤器。

在 hello_extras.py 文件的开头需要包含如下代码:

from django import template

register = template ...
more ...