【问题标题】:Django - Import Error: No module named *.urlsDjango - 导入错误:没有名为 *.urls 的模块
【发布时间】:2014-09-05 20:44:15
【问题描述】:

我正在研究 official Django tutorial,并使用 Django 版本 1.6.1、Python 2.7.6 稍微调整它以满足我自己的需要。

我正处于它让我映射 URL 的地步,但是当很明显有一个模块包含一个恰当命名的文件时,我不断收到“没有名为 customers.urls 的模块”错误,所以我真的很茫然至于我做错了什么。

我最初的想法是我需要在 root/urls.py 中导入一些与客户相关的东西,但是每次导入的组合都会导致大致相同的错误,并且教程并没有说要这样做。

ROOT_URLCONF = 'taco.urls'(taco 是项目的名称)

我正在使用 manage.py/runserver 运行它,因此我知道没有特殊的 Web 服务器欺骗发生。我已经重启了好几次了。

这些应用程序都已正确注册,正如回溯可以证明的那样。

任何关于我忽略的东西的指针都将不胜感激!

根/urls.py:

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

admin.autodiscover()

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

客户/urls.py:

from django.conf.urls import patterns, url;

from customers import views;

urlpatterns = ('', 
    url(r'^$', views.index, name='index')
);

客户/views.py:

from django.shortcuts import render
from django.http import HttpResponse;

def index(request):
    return HttpResponse("Hello");

追溯

Environment:


Request Method: GET
Request URL: http://192.168.3.208:8000/customers/

Django Version: 1.6.1
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'south',
 'taco.customers',
 'taco.inventory',
 'taco.lookups',
 'taco.orders')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  99.                 resolver_match = resolver.resolve(request.path_info)
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in resolve
  337.             for pattern in self.url_patterns:
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in url_patterns
  365.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in urlconf_module
  360.             self._urlconf_module = import_module(self.urlconf_name)
File "/usr/lib/python2.7/dist-packages/django/utils/importlib.py" in import_module
  40.         __import__(name)
File "/var/project/taco/taco/urls.py" in <module>
  7.     url(r'^customers/', include('customers.urls')),
File "/usr/lib/python2.7/dist-packages/django/conf/urls/__init__.py" in include
  26.         urlconf_module = import_module(urlconf_module)
File "/usr/lib/python2.7/dist-packages/django/utils/importlib.py" in import_module
  40.         __import__(name)

Exception Type: ImportError at /customers/
Exception Value: No module named customers.urls

【问题讨论】:

  • 已添加为“taco.customers”。
  • 两件事 1. 我认为您需要在已安装的应用程序中添加taco。 2.你可能需要在主urls.pyinclude('taco.customers.urls')
  • 请不要在 Python 中以分号结束行。
  • @DanielRoseman - 抱歉,有些习惯很难改掉:\
  • 你在包customers中有__init__.py吗?

标签: python django


【解决方案1】:

在您的客户/urls.py 中:

改变这个:

urlpatterns = ('', 
    url(r'^$', views.index, name='index')
);

为此:

urlpatterns = patterns('', 
    url(r'^$', views.index, name='index')
);

另外,请确保您的 __init__.py 文件包含在包 customers 中。并且 INSTALLED_APPS 正确填写了您的应用名称。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'south',
    'customers',
    'inventory',
    'lookups',
    'orders',
)

【讨论】:

    【解决方案2】:

    如果 taco 是项目的名称,请检查应用是否被正确引用,因此在您安装的应用中,您可能需要以下内容:

    Installed Applications:
    ('django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'south',
     'customers',
     'inventory',
     'lookups',
     'orders')
    

    【讨论】:

    • 这是我最初的想法之一,但无论我是否添加完整路径,它都不会改变任何事情。
    • 好的,是的,您确实声明 taco 是项目的名称。在这种情况下,您不需要将 taco.appname 添加到已安装的应用程序中,您只需使用不带 taco 的应用程序名称即可。
    猜你喜欢
    • 2017-06-04
    • 2012-08-12
    • 2018-09-04
    • 2014-05-16
    • 2017-03-13
    • 2012-03-16
    • 2012-10-26
    相关资源
    最近更新 更多