Chr*_*son 10 python django pycharm
有没有办法让我配置PyCharm来运行shell_plus而不是默认的shell?
我已经尝试将manage命令的文本放在'Starting script'中,但后来我得到了django_manage_shell.run("/ Users/cmason/counsyl/code/website/counsyl/product")import os import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
# The new Django 1.4 default manage.py wants "from django..." before
# importing settings, but we usually tinker with sys.path in
# settings_local.py, which is called from settings.py. Importing
# settings.py works but does mean some double importing. Luckily that
# module does very little work.
import settings
# appease pyflakes; don't ever do this in
# non-super-meta-namespace-trickery code
settings
from django.core.management import execute_from_command_line
execute_from_command_line("shellplus")
Run Code Online (Sandbox Code Playgroud)
它并没有真正运行shell_plus.
似乎"起始脚本"除了而不是默认值之外发生.
Shell_plus会自动导入所有Django模型类等.
chr*_*ney 19
I got the model objects auto-loading by hooking into the shell_plus code. I appended this to the default startup script in Preferences > Build, Execution, Deployment > Console > Django Console:
from django_extensions.management import shells
from django.core.management.color import color_style
imported_items = shells.import_objects({}, color_style())
for k, v in imported_items.items():
globals()[k] = v
Run Code Online (Sandbox Code Playgroud)
This was on PyCharm 2018.3.3 Pro
For completeness, this was the full content of starting script:
import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)
from django_extensions.management import shells
from django.core.management.color import color_style
imported_items = shells.import_objects({}, color_style())
for k, v in imported_items.items():
globals()[k] = v
Run Code Online (Sandbox Code Playgroud)
Sen*_* H. 12
我一直在寻找同样问题的解决方案,我最终来到了这里。我尝试了其他人提出的解决方案,但似乎没有一个能解决这个问题。所以我决定寻找另一个解决方案。这就是我想出的:
下面的代码块是PyCharm 2019.2的原始 Django Console 启动脚本:
import sys, django
print('Python %s on %s' % (sys.version, sys.platform))
print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django):
django.setup()
import django_manage_shell
django_manage_shell.run(PROJECT_ROOT)
Run Code Online (Sandbox Code Playgroud)
安装IPython并更改最后两行,如下所示以最正确的方式完成:
from IPython.core.getipython import get_ipython
ipython = get_ipython()
from django_extensions.management.notebook_extension import load_ipython_extension
load_ipython_extension(ipython)
Run Code Online (Sandbox Code Playgroud)
要使其工作:打开 PyCharm 设置 ( CTRL+ S) 并前往Django 控制台部分。然后在启动脚本窗口中进行更改并应用。最后,启动新的Python 控制台实例。
我查看了 的源代码shell_plus,并注意到您可以在Command名为的类上使用一个方法get_imported_objects({})
在 PyCharm 中,转到:构建、执行、部署 > 控制台 > Django 控制台 > 启动脚本
将此添加到该框中的现有代码中:
from django_extensions.management.commands.shell_plus import Command
globals().update(Command().get_imported_objects({}))
Run Code Online (Sandbox Code Playgroud)
这不是一个完整的答案,但我发现这个脚本至少加载了所有应用程序模型。将其放入“设置”>“控制台”>“Django 控制台”>“启动脚本”中:
import sys
import logging
logging.basicConfig(format="%(levelname)-8s %(asctime)s %(name)s %(message)s", datefmt='%m/%d/%y %H:%M:%S', stream=sys.stdout )
log = logging.getLogger("root")
from django.db.models import get_models
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
logging.config.dictConfig(settings.LOGGING)
log.debug("Logging has been initialized at DEBUG")
log.setLevel( logging.DEBUG)
log.disabled = False
for _class in get_models():
if _class.__name__.startswith("Historical"): continue
log.debug("Registering model {}".format(_class.__name__))
globals()[_class.__name__] = _class
def debug_sql():
from debug_toolbar.management.commands import debugsqlshell
return
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2252 次 |
| 最近记录: |