在基本模板中包含视图

时间:2015-03-20 10:52:08

标签: django django-templates django-views

我正在创建一个简单的博客应用程序,我希望在网站的每个页面的导航栏中都有博客类别。

我是否必须将categories = Category.objects.all()对象传递给每个视图,或者有任何简单的方法来实现此目的吗?

2 个答案:

答案 0 :(得分:2)

是的,请看context processors

<强>的myapp / context_processors.py

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

然后将其添加到TEMPLATE_CONTEXT_PROCESSORS设置:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    "myapp.context_processors.categories",
)

答案 1 :(得分:1)

有更简单的解决方案,您可以使用template context processor。只需在您的应用程序文件中创建名为context_processors(该文件的名称无关紧要,但好的做法就是这样命名)并在该文件中创建任何将接受请求参数并返回带有其他上下文变量的字典的函数。例如:

from .models import Category

def categories(request):
    categories = Category.objects.all()

    return {
        'categories': categories,
    }

现在只需将您的上下文处理器添加到设置中:

TEMPLATE_CONTEXT_PROCESSORS += (
    'yourapp.context_processors.categories',
)