【问题标题】:Django - how to wire urls correctly? url(), include(), ImportErrorDjango - 如何正确连接网址? url()、include()、ImportError
【发布时间】:2013-07-14 09:18:05
【问题描述】:

我尝试通过将应用程序放在“apps”文件夹下来构建我的项目,如下所示:

├── manage.py
├── mysite
│   ├── apps
│   │   ├── __init__.py
│   │   ├── myapp1
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   ├── urls.py
│   │   │   └── views.py
│   │   └── myapp2
│   │       ├── __init__.py
│   │       ├── models.py
│   │       ├── urls.py
│   │       └── views.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py

在 mysite/urls.py 中:

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^myapp1/', include('mysite.apps.myapp1.urls')),
    url(r'^mysite/apps/myapp2/', include('myapp2.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

有问题:

    url(r'^myapp1/', include('mysite.apps.myapp1.urls')),
    url(r'^mysite/apps/myapp2/', include('myapp2.urls')),

我无法正确连接 myapp1 或 myapp2,Django 给了我“ImportError...no module named myapp1...”有什么帮助吗?

【问题讨论】:

    标签: django url structure django-urls importerror


    【解决方案1】:

    可能是这样的:

    include('mysite.apps.myapp1.urls')),
    

    更新

    你可以试试:

    mysite 目录中添加文件__init__.py

    【讨论】:

    • 这是我尝试过的:如果 myapp1 文件夹与 manage.py 处于同一级别,则 url(r'^myapp1/', include('myapp1.urls')) 将起作用
    • @HowardLee 我更新了我的答案,你可以试试,希望对你有帮助
    【解决方案2】:

    您在相对路径中缺少一个级别:

    url(r'^mysite/apps/myapp2/', include('apps.myapp2.urls')),
    

    myapp1 看起来应该对我有用。


    注意,比较您尝试包含 myapp1myapp2 的方式,看起来您可能对结构略有误解。 URL 与代码布局无关。这是完全有效的:

    url(r'^zimzam/allthethings/', include('apps.myapp2.urls')),
    

    【讨论】:

    • 感谢您的提示,伊兹卡塔。但是,我尝试了您的解决方案,编辑了 sdnsite/urls.py,它仍然给出 ImportError。我的目录结构:pastebin.com/X7NnqvNv 我的 sdnsite/urls.py:pastebin.com/nBN58BMq Django 错误:pastebin.com/tPTVqgua 我知道 origin/urls.py 没有问题,因为如果我将应用程序放在 manage.py 级别,它会运行正常。
    • @HowardLee 实际上,问题可能出在。以closer look at the docs 为例:每当他们使用include() 时,它都在一个普通的元组中,not 在对url() 的调用中。这行得通吗?
    • 问题解决了!是的,是的,myapp1 有效。这实际上是 myapp1.urls.py 的问题。我有“从 myapp1 导入视图”,而不仅仅是“导入视图”。我不应该有“从 myapp1 导入视图”,因为它会在“myapp1”中寻找另一个“myapp1”文件夹。我打印出了python的加载路径,并且能够追查到问题所在。
    猜你喜欢
    • 1970-01-01
    • 2015-02-09
    • 2014-03-20
    • 2012-03-05
    • 1970-01-01
    • 2015-01-25
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多