[django]自定义全局context

  1. 创建一个context processor函数

新建一个文件命名为custom_processors.py,把它放到项目app文件夹(例如我的blog文件夹),添加一个返回字典的函数,其代码如下:

from sets import Set
from django.db.models import Count
from .models import Category, Article
def category(request):
    category = Category.objects.filter(article__status=0).values('name').annotate(
            num_article=Count('article'))
    return {'categories': category,}

2.修改 settings 文件

打开项目的settings.py文件,添加如下代码:

    TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates/')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'blog.custom_processors.category',
            ],
        },
    },
]
  1. 模板中添加自定义的变量

在要测试的模板里添加{{categories}},访问的时候就会变成我们赋予其的值了,代码如下:

{% for category in categories %}
    <li class="list-group-item">
    <span class="badge">{{ category.num_article }}</span>
<a href="/category/{{ category.name }}">{{ category.name }}</a>
    </li>
{% endfor %}

由于在CONTEXT_PROCESSORS添加的函数在settings里,即使你不调用它,所有的views都自动调用它,可能会带来性能影响,请酌情使用

posted on 2016-03-25 22:41  神秘代码  阅读(1264)  评论(0编辑  收藏  举报

导航