【问题标题】:How to import urls from apps in django main urls file如何从 django 主 urls 文件中的应用程序导入 url
【发布时间】:2020-12-01 12:40:47
【问题描述】:

我有以下项目结构。

这是我的 INSTALLED_APPS 数组。

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

然后我尝试将clients.urls 文件添加到父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

但没有任何效果。

【问题讨论】:

  • 您的项目目录看起来与我所有的 Django 项目都大不相同。你打算这样做吗?或者这是你运行启动项目命令后得到的结构?
  • @ha-neul 这是我运行命令后得到的结构。

标签: python django


【解决方案1】:

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

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

因此,您将永远无法添加从 clients.urls 到主 urls.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

【讨论】:

  • 假设我想使用当前的结构,那么如何解决?
  • 嗨,我明白了,但是我怎样才能分离应用级别的 url?
  • 正如我在答案中提到的,这确实是由您到目前为止所采取的步骤引起的。如果您采取了正确的步骤,Django 将自动生成正确结构的所有重要文件和文件夹。您是否在关注特定的文档/教程?也许你错过了某些步骤。我在文件结构之后更新了一点...对于应用程序级别的 urls.py
  • 我尝试了相同的步骤,但结构不同,客户是在项目级别之外生成的。它不是项目的孩子。
  • 我的错!!! app 应该与 project 处于同一级别。我会编辑它。你的网址怎么样,现在可以用了吗?
【解决方案2】:

在主 urls.py 文件中可以添加以下代码 sn-p。

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
]

【讨论】:

  • 或“clients.appconfig”见:stackoverflow.com/questions/59235753/…
  • 它不起作用,现在它没有在 settings.py 文件中创建模块,因为 django 找不到 clients 模块,但它可以使用点符号作为 climemanage.clients 找到它。你检查过我的项目目录结构了吗?
猜你喜欢
  • 2016-06-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 2017-02-24
  • 2022-09-29
  • 2014-01-19
相关资源
最近更新 更多