代码之家  ›  专栏  ›  技术社区  ›  garg10may

如何在不启动应用程序的情况下在django应用程序中使用django导入

  •  0
  • garg10may  · 技术社区  · 8 年前

    假设我的主要应用程序结构是

    App -
        - __init__.py
        - xyz.py
      API - 
        - __init__.py
        - abc.py
      Custom- 
        - __init__.py
        - s1.py
        - s2.py
    

    正常运行时 django 我能做到 from API.abc import function 从 s1.py 文件。但是当我跑步的时候 s1 单独归档它会给出导入错误。那么,我如何才能使现有的进口工作。

    3 回复  |  直到 8 年前
        1
  •  0
  •   garg10may    8 年前

    我通过添加 App 路径到系统路径,其中python查找导入。

    import os
    import sys
    path = os.getcwd()
    sys.path.append(path)
    

    现在,根据django目录结构的现有导入工作没有任何变化。

        2
  •  0
  •   Sopan    8 年前

    而不是你运行这些 s1.py 或 s2.py 作为单个文件,尝试从Django项目的主目录运行这些文件中的方法,使用 python manage.py shell

        3
  •  0
  •   matyas    8 年前

    如果您想在不运行django应用程序的情况下交互式测试django代码,可以通过 丹戈贝壳 :

    python manage.py shell
    

    这将为您提供一个交互式的django shell,您可以像在任何其他django视图中一样导入和运行代码。

    或写 自定义管理命令 (如果要运行与Django应用程序相关的脚本,则很有用) 将文件保存到 yourproject/yourapp//management/commands/mycommand.py

    from django.core.management.base import BaseCommand, CommandError
    from polls.models import Question as Poll
    
    class Command(BaseCommand):
        help = 'Closes the specified poll for voting'
    
        def add_arguments(self, parser):
            parser.add_argument('poll_id', nargs='+', type=int)
    
        def handle(self, *args, **options):
            for poll_id in options['poll_id']:
                try:
                    poll = Poll.objects.get(pk=poll_id)
                except Poll.DoesNotExist:
                    raise CommandError('Poll "%s" does not exist' % poll_id)
    
                poll.opened = False
                poll.save()
    
                self.stdout.write(self.style.SUCCESS('Successfully closed poll "%s"' % poll_id))
    

    然后可以使用 python manage.py mycommand source

    如果您只想运行一个不相关的脚本,请确保在运行python脚本时设置pythonpath和/或django_settings_模块:

    PYTHONPATH=/path/to/project DJANGO_SETTINGS_MODULE=djangoproject.settings python s1.py