用于运行Django命令的Python脚本

时间:2011-08-18 12:00:39

标签: python scripting django-admin

我想运行一个应该执行的python脚本:

  1. 创建一个django项目:django-admin startproject foobar
  2. 在项目中创建应用:python manage.py barfoo
  3. 在设置barfoo中添加新创建的应用INSTALLED_APP的条目。
  4. 我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:10)

似乎有一种pythonic方式来做#1和#2

https://docs.djangoproject.com/en/dev/ref/django-admin/#running-management-commands-from-your-code

from django.core import management
management.call_command('flush', verbosity=0, interactive=False)
management.call_command('loaddata', 'test_data', verbosity=0)

答案 1 :(得分:2)

阅读一些abour子进程和Popen方法。这可能就是你要找的东西。

  1. Popen(["django-admin", "startproject", "%s" % your_name ], stdout=PIPE).communicate()

  2. Popen(["python", "manage.py", "%s" % your_app_name ], stdout=PIPE).communicate()

  3. 3。 我知道这不是一个完美的代码,但我只是在提出一个想法。

    with open("settings.py", 'r') as file:
        settings = file.readlines()
    
    new_settings = []
    for line in settings:
        if "INSTALLED APPS" in line:
            new_settings.append(line.replace("INSTALLED_APPS = (", "INSTALLED_APPS = (\n'%s'," % your_app_name))
        else:
            new_settings.append(line)
    with open("settings.py", 'w') as file:
        file.write("".join(new_settings))
    

答案 2 :(得分:1)

6年后,我偶然发现了这个问题,试图找出如何为应用程序编写一些测试,该应用程序只添加一个与项目中其他应用程序交互的自定义​​模板标记。希望这可以帮助别人。

在@groovehunter的基础上回答:official documentation现在(Django 1.10)在dev之外加入了这个功能。

请注意,在调用startapp之前,您需要将当前目录更改为已创建的项目。有关详细信息,请参阅this answer

from django.core import management
import os

management.call_command('startproject', 'foobar')
os.chdir('foobar')
management.call_command('startapp', 'barfoo')

或者您可以使用附加参数来startproject在当前目录中创建项目,如果您确定不会出现问题:

from django.core import management

management.call_command('startproject', 'foobar', '.')
management.call_command('startapp', 'barfoo')