提问人:dr_jack3l 提问时间:10/4/2023 更新时间:10/4/2023 访问量:25
Django - 如何从应用中正确扩展模板
Django - How to extend a template from within an app correctly
问:
我正在开发一个 Udemy 类以重新进入 Django 开发,这个类让我以与我习惯的方式不同地做模板文件夹。这是我的文件结构的当前目录,显示我的模板所在的位置:
我还不能嵌入,所以这是我能做的最好的。请忽略 ARCHIVES 目录,它只是在我测试时就在那里。我正在尝试从base.html扩展store.html,但是为了测试内容,我正在尝试从“test.html”扩展,您可以在图像中看到。
从历史上看,我总是将模板目录添加到顶层,但这个类在应用程序级别上将它们添加到顶层。我在这里的问题是我无法显示 store.html。test.html (base) 显示良好,但我无法扩展它,并且我尝试使用 'store/test.html'、'test.html.html' 和 '../test.html'。我知道后者可以追溯到另一个目录级别,但我只是想声明我一直在尝试更改它的外观。
有几件事:我的 settings.py 添加了“商店”,并且测试.html显示在我的导航栏中很好。我在 settings.py 的模板部分将 APP_DIRS' 设置为 True,我的商店应用程序中的 urls.py 具有 URL 模式的“path('', views.store, name='store'),',然后我在应用程序中的视图具有呈现应用程序视图的功能,这似乎 views.py 应用程序级别工作正常。
我什至继续编写代码以确保我在 store.html 中的代码设置为引导程序,并且它有效。我还将其添加到正文中的 test.html 中,这也使它正确显示,它只是不会扩展和炫耀商店 .html。这可能是我这边的一个简单的错误,但我正在努力让它工作,并且在我让这部分工作之前无法继续。有人可以给我一些建议/帮助吗?
答:
您可能需要在项目 settings.py 文件中定义BASE_DIR。这用于为项目的各个部分构建绝对文件路径。
这看起来像这样:
BASE_DIR = Path(__file__).resolve().parent.parent
然后,您可以使用它来构造项目中目录的路径。在您的情况下,这将在您的商店应用程序中,但我通常建议将 base.html 文件和其他静态元素保留在它们自己的目录中,如果它们要在整个站点中使用。
例如,假设您将它们保存在名为 templates 的文件中,那么在 settings.py 文件中,您将构造如下路径:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': 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',
],
},
},
]
这里的关键是 DIRS 项,BASE_DIR与您的目录连接,在本例中为“模板”,但它可以是任何东西。
然后,您可以将其他 html 模板中的基本模板称为:
{% extends 'base.html'%}
其中“base.html”是文件的名称。
评论
{}