Django从理论到实战(part18)--配置templates文件夹路径

    技术2024-11-17  10

    学习笔记,仅供参考

    参考自:Django打造大型企业官网;

    本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的记录一下。


    配置templates文件夹路径

    在项目的settings.py配置文件中,有一个TEMPLATES列表,这个列表中包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等:

    TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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:是一个列表,在这个列表中可以存放所有的模板路径,以后在视图中使用render或者render_to_string渲染模板的时候,会在这个列表的路径中查找模板,例如:

    'DIRS': [os.path.join(BASE_DIR, 'templates')], #设置的路径:项目的绝对路径/templates #BASE_DIR全局变量,可以动态的获取项目绝对路径,无论我们把项目迁移到哪里

    APP_DIRS:默认为True,这个设置为True后,Django会于APP下的templates文件夹中查找模板(前提是APP已经在INSTALLED_APPS列表中安装),我们在INSTALLED_APPS列表中安装的app如下:

    INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'book', 'cms', 'front', ] 模板查找顺序

    对于代码render('list.html'),Django会先在DIRS列表的路径中依次查找有没有这个模板,如果有,就返回该模板文件。

    如果在DIRS列表中所有的路径下都没有找到该模板文件,那么Django会先检查当前这个视图所处的app是否已经安装,如果已经安装了,那么就先在当前这个app下的templates文件夹中查找模板,如果没有找到,那么会在其他已经安装了的app中查找。如果所有路径下都没有找到,那么会抛出一个TemplateDoesNotExist的异常。

    举个例子

    现在,我们利用模板来写一个页面。

    首先,在主项目文件夹下创建templates文件夹,并在其中创建我们的第一个模板文件index.html:

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>小黄之家</title> <style> h1 { color: pink; } </style> </head> <body> <p> <h1> 兔子喜食草 </h2> <p> 一般家庭饲养的兔子要注意食物的提供,因为幼兔没有饱感。 蔬菜本来是不建议给幼兔吃的,容易得肠炎,成年后才可以适当提供 </p> </p> </body> </html>

    在主urls.py中创建一个路由:

    urlpatterns = [ path('admin/', admin.site.urls), path('', views.page), path('login/', views.login, name = "signin"), path('template/', views.template), ]

    在主views.py中创建一个视图函数:

    def template(request): return render(request, 'index.html')

    向http://127.0.0.1:8000/template/发起请求:

    Processed: 0.038, SQL: 9