Django,在子文件夹中无法创建应用程序

23

我正在使用Windows操作系统,尝试在名为Apps的公共文件夹中创建一个新的应用程序。 myApp文件夹已经存在于Apps中。我正在从项目根目录运行:

python manage.py startapp myApp Apps\myApp

然后我得到:

Error: 'Apps\\myApp' is not a valid app name. Please use only numbers, letters and underscores.

我不知道为什么要使用双斜杠。我尝试了使用正斜杠来确保:

python manage.py startapp myApp Apps/myApp

我得到了这个:

Error: 'myApp' conflicts with the name of an existing Python module and cannot be used as an app name. Please try another name.

我无法确定这是Windows的问题还是Python的问题。


我的应用程序是否与现有的Python模块发生冲突?如果尝试使用“myApp2”,会发生什么? - hwjp
实际上,我刚刚启动了一个Windows虚拟机,我认为这是一个真正的错误... - hwjp
我尝试了几个名称,但结果总是一样。实际上,我复制了一个旧的应用程序文件夹到_Apps_文件夹中,添加了一个Apps\__init__.py文件,同步了数据库,看起来似乎可以工作。但是,我认为这只是一个解决方法而不是解决方案... - Leonardo
8个回答

37

尝试这个:

mkdir Apps\newapp
python manage.py startapp NewApp Apps/newapp

你需要创建一个名为 "NewApp" 的应用程序并放置在文件夹 "Apps/newapp" 中。


不是的,它会在根目录下创建NewApp文件夹,然后我会收到错误信息:Error: 'Apps\\newapp' is not a valid app name. Please use only numbers, letters and underscores. 我猜这与双反斜杠有关... - Leonardo
我正在使用Xp,Django 1.4,不知道发生了什么事。 - Leonardo
1
感谢您的回答。这解决了我的问题。让我也来发表一下我的看法 :) 。Django 1.9.8及以上版本要求首先创建应用程序目录,否则会抛出错误“目录不存在”。 - cutteeth

17

从项目根目录创建您的应用程序目录 -

mkdir Apps

进入你的应用程序目录 -

cd Apps

通过在您的根项目目录中调用manage.py运行Python-

python ../manage.py startapp newapp

就是这样


1
你能加一些解释吗?仅有一个代码块并不是非常有信息量的。 - CertainPerformance

10

官方文档如下:

如果提供了可选的目标路径,Django将使用该现有目录而不是创建新目录。 您可以使用“.”来表示当前工作目录。
django-admin.py startapp myapp /Users/jezdez/Code/myapp

因此,请尝试使用python manage.py startapp myApp ./Apps/myApp 或者完整路径。


点号“.”在Windows上不起作用,所以我尝试了绝对路径python manage.py startapp myApp D:\Documents\HOME\MyProject\Apps\myApp,一个名为myApp的应用程序被创建在根文件夹中,但是我收到了这个错误:Error: 'D:\\Documents\\HOME\\MyProject\\Apps\\myApp' is not a valid app name. Please use only numbers, letters and underscores. 所以你可以看到所有的反斜杠都被加倍了,我认为这是一个Windows的问题。 - Leonardo
你有没有搞过PYTHONPATH变量? - vikingosegundo

3

对于 Django 3.2.9

创建一个子目录 Apps 来存储所有应用程序,进入该目录,为应用程序 myApp 创建一个目录,然后返回根目录。

mkdir Apps && cd Apps && mkdir myApp && cd ..

添加一个__init__.py文件(这是Python将目录视为包的方式)

在Apps子目录中创建一个名为myApp的应用程序

manage.py startapp myApp Apps/myApp

(在Windows系统中,请使用反斜杠) 以上两行代码将创建myApp。
现在,在settings.py文件中。
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # Local
    'Apps.myApp.apps.MyAppConfig', # new
]

在./Apps/myApp/apps.py文件中,将name='myApp'更改为name='Apps.myApp'可以解决这个问题。

这就是我一直在寻找的东西。谢谢。 - Shiv Krishna Jaiswal

3

manage.py文件是django-admin.py的一个薄包装器

如果您想在任何目录中创建一个新应用程序,请尝试以下操作:

使用以下命令:

$ cd <directory path>
$ django-admin.py startapp <app-anme>

你测试过你的代码了吗?cd ./apps python manage.py startapp myappPython:无法打开文件'manage.py':[Errno 2] 没有那个文件或目录 - Nairum
1
我找到了一个能够工作的命令,应该在cd <目录路径>之后运行:python /full/path/to/manage.py startapp myapp - Nairum

2

我在我的Mac上也遇到了同样的问题。
我解决了这个问题,将Django从1.3版本升级到1.4版本。


1
根据文档,您可以使用以下命令:

django-admin startapp name [directory]

但在这个例子中。
django-admin startapp myapp /Users/jezdez/myapp

文档没有说明Python会创建myapp文件夹。在执行startapp命令之前,您应该先创建它。


0
对于较新版本的Django
1. 创建所需的文件夹结构
mkdir -p apps/myapp && touch apps/__init__.py

2. 创建应用程序

python manage.py startapp myapp apps/myapp

3. 将apps/myapp/apps.py文件配置如下:
from django.apps import AppConfig


class MyappConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'apps.myapp'

4. 将应用程序添加到[project]/settings.py中的INSTALLED_APPS列表中。
INSTALLED_APPS = [
    ...
    'apps.myapp',
]

在Django 4.2.3上进行了测试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接