使用manage.py启动app以在另一个目录

时间:2015-10-20 18:01:44

标签: python django

我的Django项目结构是:

/proj
  /frontend
  /server
    /proj
    /app1
    /app2
  manage.py

如何运行python manage.py startapp app_name以便我新创建的应用程序位于/server目录中?我尝试在django-admin.py startapp appname目录中运行server来创建应用,但我最终会遇到此错误:

$ ./manage.py runserver
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/bli1/Development/Django/CL/cherngloong/cherngloong/lib/python2.7/site-packages/django/core/management/__init__.py", line 351, in execute_from_command_line
    utility.execute()
  File "/Users/bli1/Development/Django/CL/cherngloong/cherngloong/lib/python2.7/site-packages/django/core/management/__init__.py", line 343, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/bli1/Development/Django/CL/cherngloong/cherngloong/lib/python2.7/site-packages/django/core/management/__init__.py", line 177, in fetch_command
    commands = get_commands()
  File "/Users/bli1/Development/Django/CL/cherngloong/cherngloong/lib/python2.7/site-packages/django/utils/lru_cache.py", line 101, in wrapper
    result = user_function(*args, **kwds)
  File "/Users/bli1/Development/Django/CL/cherngloong/cherngloong/lib/python2.7/site-packages/django/core/management/__init__.py", line 72, in get_commands
    for app_config in reversed(list(apps.get_app_configs())):
  File "/Users/bli1/Development/Django/CL/cherngloong/cherngloong/lib/python2.7/site-packages/django/apps/registry.py", line 137, in get_app_configs
    self.check_apps_ready()
  File "/Users/bli1/Development/Django/CL/cherngloong/cherngloong/lib/python2.7/site-packages/django/apps/registry.py", line 124, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

7 个答案:

答案 0 :(得分:34)

您可以/server/appname appname之后指定destination目录的路径,即startapp <app_label> [destination] # startapp command usage ,即创建Django app目录结构的位置。

来自startapp docs:

/server/appname
  

为。中的给定应用名称创建Django应用程序目录结构   当前目录或给定目的地。

     

如果仅提供应用名称,则将在中创建应用目录   当前的工作目录。

     

如果提供了可选目的地,Django将使用该现有目的地   目录而不是创建新的

因此,您可以将destination目录的路径指定为django-admin.py startapp appname [destination] # specify destination 值。

appname

您需要做什么?

1。您需要先在/server内创建目录mkdir /server/appname # create directory from root level

startapp

2. 然后,运行django-admin.py startapp appname ./server/appname 命令创建应用。

{{1}}

答案 1 :(得分:2)

我总是按照Two Scoops of Django的设计将应用程序放在内部文件夹中(该文件夹与Django创建的项目名称相同,与Django创建的文件夹相同),该设计类似于您想要执行的操作。如您先前的答案所述,当您要创建新应用时,可以使用

python ../manage.py startapp my_new_app
在要创建应用程序的文件夹中

。另一件事,就是我所做的甚至更容易的事情是,您可以运行

django-admin startapp my_new_app
从应用程序的内部文件夹中

,它将起作用。

答案 2 :(得分:1)

我发现最简单的方法是进入server文件夹并创建一个__init__.py文件:

touch __init__.py

然后,创建您想要的任何应用程序:

django-admin startapp {{APP NAME}}

答案 3 :(得分:0)

如果您已经在server目录中,则可以运行

python ../manage.py startapp appname

appname将在server目录而不是项目根目录中创建。

答案 4 :(得分:0)

  

要在Django项目中创建新应用。

第一

  • 使用终端在要创建应用的位置转到您的文件夹

第二:

  • 在终端中键入以下命令,
django-admin startapp <new_app_name>

现在,您可以检查以给定名称创建的新应用。

答案 5 :(得分:0)

使用管理文件的绝对路径对我来说很好,例如从目标文件夹运行的示例

python /home/user/project_name/manage.py startupapp app_name

答案 6 :(得分:0)

如果您使用 cookiecutter-django 启动项目,那么下面的链接中给出了步骤。

与我在此处看到的已接受答案和其他答案的不同之处在于,您需要在 apps.py 中更改应用程序的名称作为额外步骤。

https://github.com/pydanny/cookiecutter-django/issues/1725#issuecomment-407493176

复制粘贴到这里:

1 - create the <name-of-the-app> app with python manage.py startapp
2 - move <name-of-the-app> directory to <project_slug> directory
3 - edit <project_slug>/<name-of-the-app>/apps.py and
change name = "<name-of-the-app>" to name = "<project_slug>.<name-of-the-app>"
4 - add "<project_slug>.<name-of-the-app>.apps.<NameOfTheAppConfigClass>", on your LOCAL_APPS on config/settings/base.py

此处 将是您的“服务器”目录。