首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django Template 自定义全局变量

当我在编写一个高度自定义的后台系统时,我希望将网站的一些信息存储在数据库中,用户可以通过页面修改就能生效,就像下图配置一样

通常页面中用到的变量需要在view中回传,但站点名称网站中所有页面都需要用到,难道每一个view都需要回传一遍吗?这让我想到了页面中经常用到的获取用户名方法,变量并没有在每个view中回传,但所有页面都可以调用,他是如何实现的?下文将为你详细介绍,了解之后可以通过编写自定义的全局变量,轻松解决以上问题

request哪里来的

在日常开发Django的过程中,如果你有用到默认的template,那么通常会通过来获取登陆用户的用户名,你有没有想过这个是哪来的?即便是后端里不返回这边变量依然可以使用,怎么会如此神奇

这要从Django默认配置文件里的配置说起,默认的TEMPLATES配置如下

其中指定了Djanog默认使用的模版引擎,默认的是Django自己开发的,当然你也可以替换成功能更为强大的,指定了项目中模板文件的位置,配置是否开启在已安装的app下查找template,则指定template的后端设置

之所以可以在模板中使用的奥秘便隐藏在下,这个配置指定了Django渲染时执行的Python路径列表。当模板在渲染时,会执行列表中的所有函数,并将结果与上下文的context进行合并,也就是说模板接收到的参数除了返回的外,还有以上这个列表执行返回的结果

函数返回的字典中包含了

所以如下这样一个view,即便是返回结果中没有返回,我们依然可以在模版中使用

同样的我们可以直接在模板中使用来判断用户是否拥有相应的权限,而不需要在view中返回,这也是因为返回了

类似和这些在所有模板中都可以调用的变量,可以看作是django的全局变量了

如何自定义全局变量

上边我们知道了Django是如何定义全局变量的,那么我们只需照虎画猫写个类似的函数并加入就可以了,实现步骤如下

先在名为的APP下创建个文件,编写如下的函数,返回作为全局变量

然后在的写上对应的路径

最后就可以在模板中通过来获取站点title,以及通过获取站点名称

至此,问题顺利解决

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201016A0E7MP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券