/home/ 导入错误,没有名为 home.urls 的模块

ImportError at /home/, No module named home.urls

Python 2.7 + Django 1.7

我得到:

Page not found (404)
Request Method:     GET
Request URL:    http://localhost:8000/home/

Using the URLconf defined in home.urls, Django tried these URL patterns, in this order:

^(?P<pk>\d+)/home/$ [name='home']
^(?P<pk>\d+)/services/$ [name='services']
^(?P<pk>\d+)/contact/$ [name='contact']

The current URL, home/, didn't match any of these.

You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

home/urls.py:

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

from home import views

urlpatterns = patterns('', 
    url(r'^(?P<pk>\d+)/home/$', views.Home(), name='home'),
    url(r'^(?P<pk>\d+)/services/$', views.Services(), name='services'),
    url(r'^(?P<pk>\d+)/contact/$', views.Contact(), name='contact')
)

mysite/urls.py:

from django.conf import settings
from django.conf.urls.static import static

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

from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^home/', include('mysite.home.urls', namespace="home")),
    url(r'^services/', include('home.urls', namespace="services")),
    url(r'^contact/', include('home.urls', namespace="contact"))
)

这是为什么?

项目结构:

sitename
    db.sqlite3
    home
        __init.py
        admin.py
        models.py
        static
            home.html
            services.html
            contact.html
        urls.py
        views.py
    manage.py
    mysite
        __init.py
        settings.py
        urls.py
        wsgi.py

这不包括一些 pyc 或 pycache 文件。 (我需要添加更多细节来编辑所以我想我会添加更多文本。也许这就是它想要的。我不知道。)

扩展来自@Ngenator 的评论,您在主 urls.py 文件中的 url 模式将所有内容路由到一个 url 结构,前面有:

  • 管理员
  • 服务
  • 联系

并阅读/猜测您正在尝试做什么,您可能不需要:

(?P<pk>\d+)

当您想在 views.py 文件中获取参数 pk 时,您可以使用它,例如:

def my_view(request, pk):

因此,我的猜测是您可以在 mysite/urls.py 文件夹中定义 url 模式。

在我看来,在 home/urls.py 文件中定义服务和联系人是没有意义的。如果您确实拥有家庭、联系人、管理员等应用程序,您可能只需要所有其他命名空间。

这有意义吗?您不需要为每个应用程序定义 urls.py。如果你想为 home/urls.py 保留 urls.py 结构,同时保持像 http://localhost.com:8000/home/ 这样的 url 结构,那么在你的 home/urls.py 中你可以这样做类似于:

url(r'^', home.views.Home(), name='home'),

假设您的 home/views.py 文件具有如下函数:

def Home(request):

home/urls.py:

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

from home import views

urlpatterns = patterns('', 
    url(r'^home/$', views.Home(), name='home'),
    url(r'^services/$', views.Services(), name='services'),
    url(r'^contact/$', views.Contact(), name='contact')
)

mysite/urls.py:

from django.conf import settings
from django.conf.urls.static import static

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

from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('home.urls', namespace='mysite')),
)

我不确定您是否真的想要 pk 用于您的家庭应用程序,但如果您确实需要,只需将您的根 urlconf 更改为此即可。

url(r'^(?P<pk>\d+)/', include('home.urls', namespace='mysite')),

您可以在此处了解 urlconf 文档:https://docs.djangoproject.com/en/1.7/topics/http/urls/#including-other-urlconfs