我关注了Django官方文档,我正在编写投票应用程序。
在mysite包中,它表示当我运行它时没有名为'polls'的模块,我该如何解决呢?
我的python是3.6,我的Django是1.10.2,
这是我的目录
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│
│ ├── __pycache__
│ ├── settings.py
│
│ ├── urls.py
│ └── wsgi.py
└── polls
├── __init__.py
├── __pycache__
├── admin.py
├── models.py
├── tests.py
├── urls.py
├── views.py
└── apps.py
mysite的\ urls.py
from django.conf.urls import include, url
from django.contrib import admin
import polls
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', admin.site.urls),
]
settings.py中的INSTALLED_APPS
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
]
文档中还有另一个问题,即文档类型:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
当我运行它时,它说不能导入名称'views',我删除了。,然后它工作。但上面的问题仍然没有解决,谁能告诉我为什么?
答案 0 :(得分:2)
听起来您没有安装polls
应用。
转到settings.py
,在其中找到INSTALLED_APPS = [...]
并将'polls',
添加到该列表中。
答案 1 :(得分:1)
我遇到了这种情况。但是,当我将代码从文档复制到文件时,问题已解决。我认为您使用的Django版本可能不正确。参考此处:https://docs.djangoproject.com/en/2.1/faq/install/
答案 2 :(得分:1)
在文件的预输入条目中,它显示:
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
因此,请尝试输入:
from django.contrib import admin
from django.urls import path, include
from polls import views
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
,但是之后您需要将一些内容导入polls \ urls.py文件,因为如果不这样做,则会出现错误消息,指出该文件为空。
from django.contrib import admin
from django.urls import path
urlpatterns =[
]
答案 3 :(得分:1)
请检查 polls / urls.py :应该是这样的:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
还要检查 mysite / urls.py :应该是这样的:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
最后检查 polls / views.py :应该是这样的:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
我认为手动将任何内容添加到INSTALLED_APPS = []部分不是一个好主意。至少对于本教程而言。
答案 4 :(得分:1)
我也遇到了这个问题,但就我而言,这是因为我无意中将mysite/urls.py
教程中打算进行的更改添加到了mysite/urls.conf
中。
按照本教程创建mysite/urls.py
并进行填充可以解决我的问题。
答案 5 :(得分:0)
我觉得这个问题与设置环境有关。
对于您的第一个问题,请尝试url(r'^polls/', include('mysite.polls.urls')),
对于第二个问题,请尝试from polls import views
,或者坚持使用import views
。
如果这不起作用,我建议重新启动教程,因为显然环境尚未相应设置。另一方面,代码完全没问题。
答案 6 :(得分:0)
您正在使用的TCP端口是否可用?该示例告诉您尝试http://localhost:8000/polls/
,但可能会发生端口8000已被使用。
使用命令(在Windows中)
netstat -an|findstr 8080
在Linux中,命令应为
netstat -an|grep 8080
检查端口8080的可用性(我随机选择了端口号)。
如果目标端口可用(为了参数,让我们说),在命令提示符下键入以下命令以启动Django的内置轻量级Web服务器:
python manage.py runserver 8080
我假设上面是在manage.py所在的位置运行。 如果到目前为止一切正常,轻量级网络服务器将会启动。
然后,在您的浏览器中,您应该尝试显示Hello, world. You're at the polls index.
答案 7 :(得分:0)
尽管有附加的文件夹架构,但我怀疑应用程序polls
的启动文件夹太高。意味着,在文件夹“ You_want_to_keep_Your_project
”中,您拥有:mysite>mysite
。而且,您应该先从mysite
内部启动应用程序,但是您只是在文件夹“ You_want_to_keep_Your_project
”中启动它。
我在本教程中是这样做的,并且存在相同的问题。
PS。您现在无需在设置中声明polls
(当然,如果您这样做了,这不是问题)
答案 8 :(得分:0)
我遇到了这个问题,花了我两天的时间,根本原因是urls.py的文件名错误,例如'urls.py'。 “ urls.py”中urls.py前面有一个空格。 当我将polls /'urls.py'固定为polls / urls.py时,它起作用了。
答案 9 :(得分:0)
在'mysite',
部分的'polls',
之前您有INSTALLED_APPS = []
。此外,每个应用程序名称都应写为'xyz',
,此处通常会漏掉语法,请检查一下。确认并选中后,请运行python manage.py migrate polls
。
确保在(VENV)中而不是(BASE)中运行此文件。在此python manage.py runserver
命令之后,将启动指定IP的服务器。