当我在编写一个高度自定义的后台系统时,我希望将网站的一些信息存储在数据库中,用户可以通过页面修改就能生效,就像下图配置一样
通常页面中用到的变量需要在view中回传,但站点名称网站中所有页面都需要用到,难道每一个view都需要回传一遍吗?这让我想到了页面中经常用到的获取用户名方法,变量并没有在每个view中回传,但所有页面都可以调用,他是如何实现的?下文将为你详细介绍,了解之后可以通过编写自定义的全局变量,轻松解决以上问题
request哪里来的
在日常开发Django的过程中,如果你有用到默认的template,那么通常会通过来获取登陆用户的用户名,你有没有想过这个是哪来的?即便是后端里不返回这边变量依然可以使用,怎么会如此神奇
这要从Django默认配置文件里的配置说起,默认的TEMPLATES配置如下
其中指定了Djanog默认使用的模版引擎,默认的是Django自己开发的,当然你也可以替换成功能更为强大的,指定了项目中模板文件的位置,配置是否开启在已安装的app下查找template,则指定template的后端设置
之所以可以在模板中使用的奥秘便隐藏在下,这个配置指定了Django渲染时执行的Python路径列表。当模板在渲染时,会执行列表中的所有函数,并将结果与上下文的context进行合并,也就是说模板接收到的参数除了返回的外,还有以上这个列表执行返回的结果
函数返回的字典中包含了
所以如下这样一个view,即便是返回结果中没有返回,我们依然可以在模版中使用
同样的我们可以直接在模板中使用来判断用户是否拥有相应的权限,而不需要在view中返回,这也是因为返回了
类似和这些在所有模板中都可以调用的变量,可以看作是django的全局变量了
如何自定义全局变量
上边我们知道了Django是如何定义全局变量的,那么我们只需照虎画猫写个类似的函数并加入就可以了,实现步骤如下
先在名为的APP下创建个文件,编写如下的函数,返回作为全局变量
然后在的写上对应的路径
最后就可以在模板中通过来获取站点title,以及通过获取站点名称
至此,问题顺利解决
领取专属 10元无门槛券
私享最新 技术干货