当前位置: 首页 > 面试题库 >

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

籍辰沛
2023-03-14
问题内容

我想知道如何将变量传递给我的所有模板,而无需在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,请执行以下步骤:

  • 加入custom_appINSTALLED_APPSsettings.py(你已经做了了,对不对?);
  • 创建一个context_processors.pyinto custom_app文件夹;
  • 将以下代码添加到该新文件中:
def categories_processor(request):
 categories = Category.objects.all()            
 return {'categories': categories}

加入context_processors.pyTEMPLATE_CONTEXT_PROCESSORSsettings.py

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")

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



 类似资料:
  • 上一节中,我们简单介绍了模板相关的概念,并手动实践了 python 中的两个流行的模板库 Mako 和 Jinja2。接下来,我们将深入了解如何在 Django 中使用模板系统。 1. Django 中的模板系统 Django 中自带了一个模板系统,叫做 Django Template Language (DTL),通过该引擎,我们可以方便的加载模板文件到内存中进行编译并动态插入数据,最后返回转换

  • 问题内容: 查找在Django模板字典值的常规方法是, 。如果键是循环变量怎么办?即: 失败。如何解决? 问题答案: 编写自定义模板过滤器: (我.get这样使用,如果不存在该键,则不返回任何键。如果执行此操作,则将引发一个then。) 用法:

  • 问题内容: 查找在Django模板字典值的常规方法是, 。如果键是循环变量怎么办?即: 失败。如何解决? 问题答案: 编写自定义模板过滤器: 用法:

  • 我试图为这样的函数编写一个单元测试: 为了测试这段代码,我需要模拟服务,因为它调用类外的函数,但问题是它是私有的。 我该如何用玩笑来模拟一个私有变量呢?这个类创建了它自己的实例,所以甚至可以模仿它吗?

  • 问题内容: 公平警告:除非您具有JIRA的经验并可以访问其来源(企业用户),否则很难回答这个问题。 大家问候, 我正在写一个扩展AbstractIssueSelectAction的插件。我注意到等等在我的速度模板中都可用,但是,还有其他一些我想介绍的东西。我不知道如何在速度参数图中添加其他内容。我什至使用了远程调试器来尝试逐步检查堆栈并弄清楚发生了什么- 但是由于堆栈太深以及我无法正确附加所有源代

  • 我的 views.py 交出了一个名为“preSelect”的变量,其中包含一个整数值。 在模板中,我想在 If 语句中使用该 Integer 来检查当前 for 循环计数器是否小于或大于我的值。 但是,这会返回以下错误: 环境: 申请方式: POST申请网址:http://127.0.0.1:8000/ Django版本:1.10.2 Python版本:2.7.11安装的应用:['django.