Django -如何正确地从应用程序中扩展模板

omqzjyyz  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(102)

我正在使用一个Udemy类来重新回到Django开发中,这个类让我以不同于我习惯的方式处理模板文件夹。这是我的文件结构的当前目录,显示了我的模板所在的位置:
VS Code Directory Structure and extended template
我还不能嵌入,所以这是我能做的最好的。请忽略ARCHIVES目录,这只是在那里,而我测试的东西了。我试图从base.html扩展store.html,但是为了测试,我试图从'test.html'扩展,你可以在图片中看到。
过去,我总是将templates目录添加到顶层,但这个类将它们添加到应用程序级别。我这里的问题是我不能让store.html显示出来。test.html(base)显示得很好,但是我不能扩展它,我已经尝试过使用'store/test.html','test.html'和'../test.html'来扰乱{% extends './test.html' %)。我知道后一个可以追溯到另一个目录级别,但我只是想说明,我一直在尝试更改它的外观。
几件事:我的settings.py已经添加了'store',并且test.html显示在我的导航栏中。我在www.example.com的模板部分中将APP_DIRS'设置为Truesettings.pyurls.py我的商店应用程序中的www.example.com有'path('',views.store,name ='store'),'用于URL模式,然后我在应用程序中的视图有一个函数来呈现应用程序的视图,这似乎可以正常工作views.py at app level
我甚至在codeply上确保我在store.html中的代码被正确地设置为bootstrap,并且它可以工作。我还将其添加到了test.html的主体中,这使得它也能正确显示,它不会扩展和炫耀store.html。这可能是一个简单的错误,对我来说,但我正在努力让这工作,不能继续,直到我得到这部分工作。有人可以给予我一些建议/帮助吗?

j8ag8udp

j8ag8udp1#

你可能需要在你的项目settings.py文件中定义你的BASE_BLOG。这是用来为你的项目的各个部分建立绝对文件路径的。
这看起来像这样:

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项,在本例中,它可以是“templates”,也可以是任何东西。
然后,您可以在其他html模板中引用基本模板,如:

{% extends 'base.html'%}

其中'base.html'是文件的名称。

相关问题