You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为django-extensions的shell_plus会话添加本地变量

如何为django-extensions的shell_plus会话添加本地变量

我明白你的困扰——自己手动写管理命令要重复处理模型映射,还没法复用shell_plus已经帮你准备好的settings、模型这些环境,同时又想把自己的字典键值对直接丢进shell会话里用。其实有几个简单的办法可以解决这个问题:

方法一:用shell_plus的--startup参数加载脚本

这是最直接的方式,你可以写一个初始化脚本,把需要的变量注入到shell环境中,然后让shell_plus启动时自动执行它。

  1. 先创建一个启动脚本,比如shell_startup.py,内容如下:
# 定义你的变量字典
devs = {
    'hot_water': object(),
    'air': object()
}
procs = {
    'clean_keg': lambda x: 'do_something'
}

# 把字典里的每个键值对单独加到全局作用域(这样你直接敲hot_water就能用)
globals().update(devs)
globals().update(procs)

# 同时也保留字典本身(方便直接操作devs、procs)
globals()['devs'] = devs
globals()['procs'] = procs
  1. 启动shell_plus时指定这个脚本:
python manage.py shell_plus --startup shell_startup.py

这样启动后,shell_plus原本的settings、所有模型都会自动加载,你的hot_water、air、clean_keg这些变量也直接能用,devs和procs字典也在环境里。

方法二:通过settings配置预导入(更持久)

如果不想每次启动都加--startup参数,可以在Django的settings.py里配置预导入,让shell_plus每次启动都自动加载你的变量。

  1. 先在项目里创建一个存放自定义变量的模块,比如my_shell_vars.py,内容和上面的启动脚本类似:
devs = {
    'hot_water': object(),
    'air': object()
}
procs = {
    'clean_keg': lambda x: 'do_something'
}

# 注入字典内的键值对到全局
globals().update(devs)
globals().update(procs)
  1. 在settings.py里添加配置:
SHELL_PLUS_PRE_IMPORTS = [
    # 导入整个模块的内容,这样变量会直接进入环境
    ('my_shell_vars', '*'),
]

之后每次启动python manage.py shell_plus,你的变量都会自动加载,完全不用额外操作。

额外说明:你之前的冗余代码可以去掉啦

你之前手动构建的model_map完全是多余的——shell_plus已经自动帮你导入了所有Django模型(直接用模型类名就能访问),而且settings、Django的核心模块也都已经加载好了,用上面的方法就能直接复用这些现成的环境,不用自己再手动处理。

备注:内容来源于stack exchange,提问作者Lord Elrond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 16:30:30