【问题标题】:How to create hierarchical urls within django app?如何在 django 应用程序中创建分层 url?
【发布时间】:2019-06-19 04:30:30
【问题描述】:

我有多个基于应用程序的 django 项目,并且在某些应用程序中,由于模型数量众多,url 方案变得复杂。因此,我正在寻找一种在应用内创建分层 url 结构的方法。

在我的项目的 urls 文件中我执行以下操作。

from order import urls as order_urls

order 应用程序中,我有 urls.pyurls 目录,其中包含每个模型的单独 url 模式,如下所示。

在应用程序的 urls.py 文件中,我按如下方式导入模型的 url。

from  urls import rental as rental_urls

urlpatterns = [
    url(r'^rental-request/', include(rental_urls)),
]

这给了我错误:ModuleNotFoundError: No module named 'urls' 如果我输入 __init__.py 它会给我循环导入错误。

我不确定这是否适合我的要求。任何人都可以解释实现它的正确方法吗?

【问题讨论】:

  • 注意,您可以包含在相同 urls.py 中定义的模式列表;它不必是一个单独的模块。

标签: django django-urls


【解决方案1】:

在同一个文件夹中有一个名为 urls 的文件夹(带有一个 __init__.py 文件)以及一个文件 urls.py 可能会导致从项目中的任何位置加载模块 order.urls 时出现问题。 Python 如何知道必须加载哪个文件?

考虑这个结构:

├── main.py
├── urls
│   └── __init__.py
└── urls.py

每个文件的内容如下:

# urls/__init__.py
urlpatterns = "I'm in folder"

# urls.py
urlpatterns = "I'm in file"

# main.py
import urls
print(urls.urlpatterns)

当你运行 main.py 时,结果是:

% python main.py
I'm in folder

可能的解决方案: 您可以删除urls.py 并将其内容移动到urls/__init__.py,或重命名文件夹urls 以避免冲突并相应地更新导入(在urls.py

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多