由于看的是一本翻译的《精通Django》,书上的代码都是基于Django1.8.13的,但是只适用于python3.4版本的,所以我的Python3.7在装上Django2.2.6后使用代码时遇到了大量的bug,在谷歌搜索后终于解决了,但是有些我不是很理解(像r'^hello/$'出现bug,但是换成r'^$'就可以了)
①按照书上的操作装上虚拟环境virtualenv之后,创建了自己的文件夹env_mysite/projects_django/mysite
之后修改urls.py和views.py,书上原代码如下:(开始下载后,urlpatterns那里用的应该是path,但是我为了和书上的一样换成了url,所以开始的一些库啥的都要改变)
urls.py
from django.conf.urls import include,url
from django.contrib import admin
from mysite.views import hello
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^hello/$',include('hello.urls'),
]
views.py
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world!")
②运行后遇到的第一个bug就是:
django.core.exceptions.ImproperlyConfigured: Passing a 3-tuple to include() is not supported. Pass a 2-tuple containing the list of patterns and app_name, and provide the namespace argument to include() instead.
截图显示:
可以参考这篇博客:https://blog.csdn.net/joe8910/article/details/82252882
咱们的Django2.2版本和Django1.8版本的区别就在这
直接删除include后代码就能解决:
urls.py代码如下:
from django.conf.urls import include,url
from django.contrib import admin
from mysite.views import hello
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^hello/$',hello),
]
#url使用正则表达式模式匹配浏览器中的URL,把它映射到Django项目中的某个模块上
#urlpatterns即url()实例列表,负责定义URL及处理URL代码之间的映射
现在继续运行,发现cmd上开始没报错:
但是在浏览器打开:127.0.0.1:8000时出现这样的bug:
我翻了好多博客,还是没明白为什么,于是改成这样,发现居然可以了:
from django.conf.urls import include,url
from django.contrib import admin
from . import views
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^$',views.hello),
]
#url使用正则表达式模式匹配浏览器中的URL,把它映射到Django项目中的某个模块上
#urlpatterns即url()实例列表,负责定义URL及处理URL代码之间的映射
现在运行cmd和网页上都显示正确:
虽然解决了,但是我还是有点问题,希望大佬能够帮助我:
1)为什么库:from mysite.views import hello换成from . import views?
2)为什么r'^hello/$'要换成r'^$'?
最后:
1)如果您能解决这个问题,请留言告诉我,谢谢~~
2)认为这篇文章有帮助的话,请点个赞(大物考试前夕的我都没复习~~)
3)互相交流加QQ:3055299880(我小号)