一开始是遇到了TemplateDoesNotExist的错误,上百度都是说改settings.py里面的TEMPLATE的DIRS,

但我改了还是出现问题,

我用的《python编程从入门到实践》这本书的出版时间是2016的,当时作者用的是django 1.x版本,而现在官方已更新成4.x版本。

就出现一些由于版本更新而导致的问题,我来分享一下我的解决方案。

 

书中和现在的差异主要是:

  Django放弃使用url函数,而改为path和re_path ,所以有些语法就有小改变

他们都是用来配置路由的

  1.x:  url是支持正则,也支持直接匹配

  新版:  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的名称')),
]

这样问题就解决啦!

posted on 2022-12-29 12:55  iceshadow  阅读(121)  评论(0)    收藏  举报