gpt4 book ai didi

python - Django - 如何使变量可用于所有模板?

转载 作者:IT老高 更新时间:2023-10-28 20:32:51 25 4
gpt4 key购买 nike

我想知道如何将变量传递给我的所有模板,而不是在我的 views.py 文件中的每个方法上重复相同的代码?

在下面的示例中,我想让类别(类别对象的数组)可用于 Web 应用程序中的所有模板。

Eg: I would like to avoid writing 'categories':categories on every method. Is it possible?

一种查看方式

def front_page(request):
categories = Category.objects.all()
if is_logged_in(request) is False:
return render_to_response('users/signup.html', {'is_logged_in': is_logged_in(request), 'categories':categories}, context_instance=RequestContext(request))
else:
return render_to_response('users/front_page.html', {'is_logged_in': is_logged_in(request), 'categories':categories},context_instance=RequestContext(request))

另一种查看方式

def another_view_method(request):
categories = Category.objects.all()
return render_to_response('eg/front_page.html', {'is_logged_in': is_logged_in(request), 'categories':categories},context_instance=RequestContext(request))

最佳答案

您需要的是一个上下文处理器,而且创建它非常容易。假设您有一个名为 custom_app 的应用,请按照以下步骤操作:

  • settings.py 中将 custom_app 添加到 INSTALLED_APPS (你已经完成了,对吧?);
  • custom_app 文件夹中创建一个 context_processors.py
  • 将以下代码添加到该新文件中:

    def categories_processor(request):
    categories = Category.objects.all()
    return {'categories': categories}
  • context_processors.py 添加到 settings.py

    中的 TEMPLATE_CONTEXT_PROCESSORS
    TEMPLATE_CONTEXT_PROCESSORS += ("custom_app.context_processors.categories_processor", )

现在您可以在所有模板中使用 {{categories}} :D

从 Django 1.8 开始

要添加 TEMPLATE_CONTEXT_PROCESSORS,您必须在设置中添加下一个代码:

TEMPLATES[0]['OPTIONS']['context_processors'].append("custom_app.context_processors.categories_processor")

或者将该字符串直接包含在 TEMPLATES 设置中的 OPTIONS.context_processors 键中。

关于python - Django - 如何使变量可用于所有模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17901341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com