一开始是遇到了TemplateDoesNotExist的错误,上百度都是说改settings.py里面的TEMPLATE的DIRS,
但我改了还是出现问题,
我用的《python编程从入门到实践》这本书的出版时间是2016的,当时作者用的是django 1.x版本,而现在官方已更新成2.x版本。
就出现一些由于版本更新而导致的问题,我来分享一下我的解决方案。
书中和现在的差异主要是:
Django放弃使用url函数,而改为path和re_path ,所以有些语法就有小改变
他们都是用来配置路由的
1.x: url是支持正则,也支持直接匹配
2.x: path不支持 正则表达式,不过re_path是支持的
那我们就可以这样改:
你的app/urls.py
from django.urls import re_path from . import views urlpatterns = [ # 主页 re_path(r'^$', views.index, name='index'), ]
将导入的path改为导入re_path,然后用re_path的语句,(index是我的主网页)
项目/urls.py
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('', include(('APP名称.urls', 'APP名称'), namespace='APP的名称')), ]
这里要在include里面创建一个元组('XXX.urls', ‘XXX’)
如果不改的话 命令行就会提示
django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not
supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and
app_name instead. 翻译: django.core.exceptions.不正确配置: 不支持在include()中指定命名空间而不提供app_name。 在包含的模块中设置app_name属性,或者传递一个包含模式列表和app_name的2次元组。
它告诉我们解决方法有两种;
1、就是我在上面改法,在include里面传递一个元组
2、在你的应用的urls.py文件里面设置一个 app_name属性
以下是另一种解决方案:
你的APP/urls.py
from django.urls import re_path from . import views urlpatterns = [ # 主页 re_path(r'^$', views.index, name='index'), ] app_name = '你的APP名称'
项目/urls.py
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('', include('APP名称.urls', namespace='APP的名称')), ]
这样问题就解决啦!
标签:web,name,python,app,应用程序,django,urls,path,include From: https://www.cnblogs.com/iceshadow/p/17012255.html