首页 > 解决方案 > 将项目列表应用于views.py中的每个视图

问题描述

有没有一种方法可以将项目列表应用于每个视图,而无需为每个视图手动执行?我的导航栏中有一个项目列表,我必须将其添加到每个视图中以使其显示在每个页面中:

category_list = Category.objects.all()
context = {
    'category_list': category_list
    }

标签: pythondjango

解决方案


这是通过上下文处理器[Django-doc]完成的。这些是每次呈现模板时将项目添加到上下文的函数。例如,您可以将此类处理器写入名为app/context_processors.py(使用app您的应用程序名称)的文件中:

# app/context_processors.py

def category_list(request):
    return {
        'category_list': Category.objects.all()
    }

然后在settings.py文件中注册上下文处理器:

# settings.py

# …

TEMPLATES = {
    # …,
    'OPTIONS': {
        # …,
        'context_processors': [
            # …,
            'app.context_processors.category_list'
        ]
    }
}

推荐阅读