新手求助:如何在Django项目中配置访问base.html模板页面?
嘿,我看到你在跟着Bucky的Django教程学习,不过那个教程里的direct_to_template是Django非常老旧的用法了(大概是Django 1.3及以前的版本用的),现在早就被弃用啦,这就是你的配置没生效的原因。下面是当前Django版本(2.x及以上,现在主流是4.x/5.x)里的正确做法:
现在Django推荐用TemplateView这个通用视图来直接渲染模板,你需要在对应的urls.py(项目根目录或者music app的urls.py都可以,看你的路由结构)里这么写:
from django.urls import path from django.views.generic import TemplateView urlpatterns = [ # 保留你已有的其他路由... path('base/', TemplateView.as_view(template_name='music/base.html'), name='base-template'), ]
这里要注意:template_name只需要写相对于app模板目录的路径就行,因为Django会自动去每个已安装app的templates文件夹下查找,不用写全路径music/templates/music/base.html。
接下来要确认你的项目settings.py里的两个关键配置:
- 确保
musicapp已经添加到INSTALLED_APPS中,不然Django不会去它的templates文件夹找模板:INSTALLED_APPS = [ # Django内置的app,比如django.contrib.admin这些... 'music', # 把你的app加在这里 ] - 检查
TEMPLATES配置里的APP_DIRS设为True,这样Django会自动搜索每个已安装app的templates目录:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], # 这里放项目级别的模板目录,app级别的不用填 'APP_DIRS': True, # 这个必须是True 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
启动你的Django开发服务器(python manage.py runserver),然后访问http://localhost:8000/base/,就能看到你的base.html模板内容啦。如果不想路径带斜杠,也可以把url里的path('base/', ...)改成path('base', ...),不过Django推荐带斜杠的规范写法。
另外补充一句:你之前用的django.views.generic.simple.direct_to_template在Django 1.4版本就被移除了,所以不管怎么配置都不会生效,换成TemplateView就没问题了。
内容的提问来源于stack exchange,提问作者HeMA

