我正在浏览Django tutorial。在
我有这个档案
R:\jeffy\programming\sandbox\python\django_files\tutorial\django_test\...
...django_test\article\views.py
内容:
^{pr2}$这个文件:
R:\jeffy\programming\sandbox\python\django_files\tutorial\django_test\...
...django_test\urls.py
内容:
from django.conf.urls import patterns, include, url
from django.contrib import admin
from article.views import hello
urlpatterns = patterns('',
# url(r'^hello/', include(article.views.hello)),
url(r'^admin/', include(admin.site.urls)),
)
我启动Django服务器
python manage.py runserver
然后去
http://127.0.0.1:8000
它起作用了:
就像这样
http://127.0.0.1:8000/admin
但是当我取消对“hello”行的注释时,它失败了:
from django.conf.urls import patterns, include, url
from django.contrib import admin
from article.views import hello
urlpatterns = patterns('',
url(r'^hello/', include(article.views.hello)), # <--Problem line
url(r'^admin/', include(admin.site.urls)),
)
错误说
R:\\jeffy\\programming\\sandbox\\python\\django_files\\tutorial\\django_test
在PYTHONPATH中,“article”文件夹位于目录下。在
另外,为什么import article
行没有导致错误,但是调用hello
函数却失败了。在
请帮帮我。我错过了什么?在
更新
任何导入都不会以相同的方式失败(NameError at / name 'article' is not defined
):
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
url(r'^hello/', include(article.views.hello)), # <-- Problem line
url(r'^admin/', include(admin.site.urls)),
)
仅使用import article
会导致以下错误:AttributeError at / 'module' object has no attribute 'views'
from django.conf.urls import patterns, include, url
from django.contrib import admin
import article
urlpatterns = patterns('',
url(r'^hello/', include(article.views.hello)), # <-- Problem line
url(r'^admin/', include(admin.site.urls)),
)
取消导入并将调用放入字符串中(如建议),结果是ImportError at / No module named 'article.views.hello'; 'article.views' is not a package
:
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
url(r'^hello/', include(article.views.hello)), # <-- Problem line
url(r'^admin/', include(admin.site.urls)),
)
最后,直接导入hello
函数:
from django.conf.urls import patterns, include, url
from django.contrib import admin
from article.views import hello
urlpatterns = patterns('',
url(r'^hello/', include(hello)),
url(r'^admin/', include(admin.site.urls)),
)
这样,调用http://127.0.0.1:8000
失败,但以预期的方式:
但接下来,http://127.0.0.1:8000/hello
失败了:
这里有一些事情是错误的。在
1)您正在导入未使用的内容:
导入
hello
,然后从模块article
调用它,但是article
尚未导入,因此将未定义。您可以导入article
,也可以直接调用hello
。在2)此处不需要
include
。在我们通常使用
^{pr2}$include
来包含其他urls.py
模式。hello
是一个函数。在Django中,url路由的工作方式是定义一个路由并向其传递一个函数,如下所示:相关问题 更多 >
编程相关推荐