1

我正在做简单的表单处理。我的项目名称是'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> 

然后,我在位于“books”文件夹内的views.py 中编写了以下代码。

from django.shortcuts import render

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

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

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

没有名为书籍的模块

这个错误的解决方案是什么?

4

3 回答 3

1

最好的解决方案是将您的“书籍”包移动到 mysite/mysite/ 并将书籍添加到您的 settings.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.settingssettings

编辑settings.py和替换ROOT_URLCONF = 'mysite.urls'withROOT_URLCONF = 'urls'WSGI_APPLICATION = 'mysite.wsgi.application'withWSGI_APPLICATION = 'wsgi.application'

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

添加books到您的 INSTALLED_APPS

编辑wsgi.py并替换mysite.settingssettings

现在你应该可以从books import views

同样如您所见,您可以删除 mysite/mysite 文件夹

于 2013-06-13T08:59:45.513 回答
1

8 年后我遇到了同样的问题:D

Ciprian Tarta 的解决方案对我有用。但我只需要在 manage.py 文件中将“mysite.settings”更改为“settings”

我使用了 Django 3.2.9 版和 Python 3.9.9 版

于 2021-11-18T06:54:33.123 回答
0

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

于 2013-06-13T06:56:39.070 回答