如何从Django主URL文件中的应用导入URL

2024-10-04 11:35:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下项目结构

Django Project Structure

这是我安装的应用程序阵列

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'climemanage.clients'
]

然后我尝试在父urls文件中添加clients.urls文件,如下所示

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('clients/', include('clients.urls'))
]

但我得到了这个错误ModuleNotFoundError: No module named 'clients'

我可以用下面的方法解决这个问题include('climemanage.clients.urls')但是我想从路径中跳过climemanage

我试过不同的方法

import clients
import climemanage.clients
from climemanage import clients

但一切都不起作用


Tags: 文件path项目django方法fromimport应用程序
2条回答

在main url.py文件中,可以添加以下代码段

from django.urls import path, include 

urlpatterns = [
    path('admin/', admin.site.urls),
    path('something/', include('clients.urls')),
]

在settings.py文件中

INSTALLED_APPS = [
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'rest_framework',
 'webapi',  # like in my case my appname was webapi
 'nameofyourapp', #pay attention here
]

你的项目结构是错误的。似乎startproject部分或startapp部分可能出错。如果你能列出你是如何做到这一点的,那可能是最好的。请看我在答案末尾的结构

在您的情况下,您的主settings.py位于clients下。这意味着clientsstartproject的结果。目前您没有app,但是有一堆文件应该与app一起出现,这些文件现在位于migrations文件夹下

因此,您将永远无法将clients.urls中的任何内容添加到mainurls.py。因为你的clients是你的主urls.py所在的地方

我把我通常做的事情放在这里(这个mac版本,如果你使用的是windows,你需要查看django教程)

$ mkdir clienmanage
$ cd clienmanage
$ python3 -m venv myvenv      # set up virtual environment
$ source myvenv/bin/activate  # go into virtual envionment
After this step you can install django

然后,在运行startproject命令时,请确保按以下方式运行:

django-admin startproject project .

注意结尾的.

之后,您应该具有如下结构:

clienmanage
| - manage.py
| - project
|   | - __init__.py
|   | - settings.py
|   | - urls.py
|   | - wsgi.py
| - virtual
|
|___ requirements.txt

然后你会:

$ python manage.py startapp clients

clienmanage
|
| -clients # this is the app
|    | -migrations
|    | -models.py
|    | -views.py
|    | -apps.py  
| - manage.py
| - project
|   | - __init__.py
|   | - settings.py
|   | - urls.py
|   | - wsgi.py
| - virtual # a folder
|
|___ requirements.txt

在此步骤之后,django将不会自动生成app级别urls.pyforms.py。您应该在app文件夹中生成这些文件(在我的示例中,clients

***如果您想将应用程序放在不同的目录中 您可以指定目的地

$ python manage.py startapp <app_label> [destination] 

在上面的例子中,如果您想将app放在project的内部

$ python manage.py startapp clients project/clients

如果您选择此路线,请确保在INSTALLED_APPS中添加project.clients而不是clients

相关问题 更多 >