简介:许多朋友询问了如何在Django建立全球变量。首席执行官在本文中注明将为您提供详细的答案,以供所有人参考。我希望这对每个人都会有所帮助!让我们一起看看!
它对所有线程有效吗?此变量最好放置在数据库中。
如果是Java,可以通过将静态变量放入服务器中实现。您也可以在Django中进行测试
全局XX_VAR,但可能会失败。最好使用数据库的字段保存它。我们通常使用表记录来保存最常用的公共变量。
1.默认情况下定义变量,全局变量默认值
2.使用该函数时,默认情况下关闭函数,并且该函数中使用的变量不能直接在函数之外使用
3.如果需要使用,您可以声明此变量是变量使用之前的全局变量
问题在于测试= 1实际定义了局部变量测试,该测试隐藏了全局范围中的测试变量。
为了指示全局测试变量的使用,您需要使用全局关键字。
来自django.http导入httpresponse
测试= 0
DEF A(请求):
全球测试
测试= 1
返回httpresponse('查看a:test =%d'%测试)
DEF B(请求):
全球测试
测试+= 1
返回httpresponse('视图B:test =%d'%测试)
有时,我们需要一些变量来使用模板模板页面。这些变量在views.py.py.py.py.the.cy中没有返回设置。例如,以下代码:
#编码:UTF-8
从django.shortcuts导入渲染
DEF索引(请求):
上下文= {}
上下文['title'] ='测试标题'
返回渲染(请求,'index.html',上下文)
以上是views.py.t的方法之一。如下:
html
头/头
身体
H3 {title}}/H3
p是否登录:{{request.user.is_authenticated}/p
/身体
/html
除标题变量值外,响应结果还具有是否登录。登录信息来自请求变量。问题在于,请求变量未写入views.py.pys.pys.py的上下文中,并且模板不必获取变量。
当时这并不是一无所有。我逐步进行分析。解释原理后,您自然了解如何设置模板的全局变量或默认变量。
渲染方法是render_to_response的简短方法。上面的views.py代码等同于以下内容:
#编码:UTF-8
来自django.shortcuts导入render_to_response
来自django.template导入requestContext
DEF索引(请求):
上下文= {}
上下文['title'] ='测试标题'
返回render_to_response('index.html',context,requestContext(request))
如果删除了render_to_response的第三个参数,则requestContext(请求)部分。
index.html模板页面的值无法获得{{request.user.is_authenticatiencation}},也就是说,没有请求变量传递到首页。很明显requestContext至关重要。
RequestContext的内容可从官方Django文档中找到。
此类将分析设置模板设置中的Context_Processors配置。新的Django Project settings.py文件中的默认模板设置如下:
模板= [
{{{
'后端':'django.template.backends.django.djangotemplates',
'dirs':[],
'app_dirs':是的,
'选项': {
'Context_Processors':[
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',,
] ,,,,
},,
},,
这是给予的
每个人都可以发现Context_Processors具有一系列设置,其中Django的源代码是根据Django.template.context_processors.request找到的。
Django安装在Python安装目录中的LIB/SITE包装/目录中。查找django/template/context_processors.py文件。打开它时,您可以看到请求方法:
DEF请求(请求):
返回{'请求':请求}
此方法返回字典,键是请求,而值是请求对象。显然,渲染中的请求对象是通过在设置中加载context_processors list方法来获取字典项目。
我们还可以使用此方法为Django项目设置一个全局模板变量。例如,我的Django名称是myProject,并在myproject/myproject目录中创建Contexts.py文件。代码如下:
#编码:UTF-8
来自django.conf导入设置
#置
def lang(请求):
返回{'lang':settings.language_code}
该文件的方法需要请求参数,最后您需要返回字典。
再次打开settings.py文件,添加刚刚用模板编写的方法:
模板= [
{{{
'后端':'django.template.backends.django.djangotemplates',
'dirs':[],
'app_dirs':是的,
'选项': {
'Context_Processors':[
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',,
#customized模板全局变量(默认变量)
'myproject.contexts.lang',
] ,,,,
},,
},,
这是给予的
添加全局变量后,我们可以使用该变量,而无需在任何位置上手动编写相关代码以渲染模板页面。
用户名出现在TeamCola的每个页面的右上角,但是如果在每个视图方法中使用了常规方法,则如果您通过Render_TO_TO_RESPONSE方法将用户数据注入用户数据,则将执行很多重复的工作,则就像以下内容一样:def views_meth3(请求):return render_to_response('template_3.html',{'user':request.user})#...剩下的n方法。注射,或者您需要通过一些其他计算生成,这是麻烦的。因此,如何避免重复您的2B模式?我们可以选择以下模型:每次创建一个新的Django项目时,通常我们都会创建一个工具模块类似于root Directory中的utils.py。渲染方法在每个模板的渲染中注入指定的全局变量:#in utils.py:def mp_render(请求,template,context = {}):context ['user'user] = request.user resto_responseviews_meth3(请求):返回mp_render(请求,'template_3.html')已被充分理解。这样,如果将来全局变量有新的增加,您只需要修改MP_Render方法。嗯,这是一种非常常见的方法。由于这是一种常见的方法,所以让我们有一个文学上的观点。LET查看Django文档中render_to_response方法的定义。在“必需的参数”中,有此方法的第三个参数,称为Context_Instance。此参数的描述如下:渲染测试的上下文实例您需要使用requestContext对象呈现模板。“那么上下文处理器是什么?阅读了本文档的定义后,一切都应该清楚。首先,您需要了解,在Django模板系统中,包装模板变量有两种类型,一个是Django.template。 我们的威利特被这个上下文类封装,然后传递给模板。另一个是django.template.requestcontext,与上下文类相比有两个区别。第一个是区别时,当生成requestContext变量时,您需要将httprequest对象作为第一个参数作为C = requestContext(请求,请求,,,,,,,,{'foo':bar',})第二个区别是,它将添加一些自动自动自动变量,这些变量在哪里注入了模板的变量?settings.py in django In django in django in django in template_context_processors配置。此配置中的TPLE元素实际上是一种可以一个一个称为的方法。这些方法将接收一个httprequest对象作为参数,最后返回字典。本字典中的元素将成为一个变量,可以自动将模板注入requestContext中。Auth方法,包括三个元素,因此,如果使用Render_to_response方法,则传递第三个请求context参数,然后在其渲染的模板中,它可以与相应的用户,消息,perms变量。因此,最后一个文学解决方案是在需要注入全局变量的每个视图方法中,当调用render_to_response时,它将传递到第三个requestContext对象参数:def views_meth1(request):d1 = {'method':1flexibility较高且易于展开。在一般项目开发中,我个人认为普通方法足够了,因此请根据项目选择。
结论:以上是如何设置首席CTO注释引入的Django中的全球变量的所有内容。我希望这对每个人都会有所帮助。如果您想了解有关此信息的更多信息,请记住要收集对该网站的关注。