在django中导入错误,因为找不到模块

时间:2013-06-13 06:50:08

标签: python django

我正在进行简单的表单处理。我的项目名称是'mysite',我使用startapp创建了文件夹'books'。我在'mysite'文件夹中创建了一个名为'templates'的文件夹。在'templates'中,我做了一个搜索表单的html文件及其名称为“search_file.html”。 制作该html文件的代码如下所示。

<html>
<head>
    <title>Search</title>
</head>
<body>
    <form action="/search/" method="get">
        <input type="text" name="q">
        <input type="submit" value="Search">
    </form>
</body>
</html> 

然后,我在views.py中写了以下代码,该代码位于'books'文件夹中。

from django.shortcuts import render

def search_form(request):
    return render(request, 'search_form.html')

之后我在urls.py中编写了代码,该代码位于'mysite'文件夹中,如下所示。

from mysite.books import views

urlpatterns = patterns('',

    url(r'^search-form/$', views.search_form),

)

我的文件树如下所示:

主文件夹是'mysite'并且在其中:

- books

    - __init__.py
    - admin.py
    - models.py
    - tests.py
    - views.py

- mysite

    - __init__.py
    - settings.py
    - urls.py
    - wsgi.py

- templates

    - search_form.html

- manage.py

但是,当我在浏览器中运行时,错误似乎提到了这些事情。

/ search-form /

中的ImportError

没有名为books的模块

此错误的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

最好的解决方案是将您的“书籍”包移到mysite / mysite /中并将书籍添加到您的设置中.INSTALLED_APPS

但是如果你想保持它那么:

你的主“mysite”文件夹不是python包。这意味着您需要在主文件夹中添加 init .py,请参阅下面的内容:

你应该:

mysite/
    books/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py

    templates/
        search_form.html

    __init__.py
    settings.py
    urls.py
    wsgi.py      
    manage.py

修改manage.py并将mysite.settings替换为settings

修改settings.py并将ROOT_URLCONF = 'mysite.urls'替换为ROOT_URLCONF = 'urls',将WSGI_APPLICATION = 'mysite.wsgi.application'替换为WSGI_APPLICATION = 'wsgi.application'

<path to>/templates添加到您的设置.TEMPLATE_DIRS

books添加到您的INSTALLED_APPS

修改wsgi.py并将mysite.settings替换为settings

现在你可以从books import views

开始

另外如您所见,您可以删除mysite / mysite文件夹

答案 1 :(得分:0)

您是否在文件夹中创建了一个名为__init__.py的文件?