Django如何寻找访问HTML模板文件?

问题描述:

在Django中,我们在views视图函数中配置要访问的模板路径。如下:

def post_list(request, category_id=None, tag_id=None):
    return render(request, 'list.html', context={'name': 'post_list'})

在上面的视图函数中,我们设置要访问名为’list.html’的模板文件。

问题分析:

当我们在浏览器中输入对应的URL,调用post_list这个视图函数之后,
Django会按照settings.py文件中INSTALLED_APPS配置的APP顺序,如:

INSTALLED_APPS = [

    'blog',
    'config',
    'comment',
    'typeidea',

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

去到各个APP目录下的templates目录中(即:先到名为"blog"的APP目录下的templates目录)去寻找访问’list.html’这个模板文件,以此类推,直到找到名为list.html的模板文件。

因此,假设Django项目的不同APP的templates目录中包含了名字同为"list.html"的模板文件,则INSTALLED_APPS中顺序在前的APP目录下的"list.html"模板文件会覆盖掉顺序在后的APP的"list.html"模板文件。

问题解决:

为了解决以上问题,我们可以把Django项目中不同APP的模板文件都放在与工程同名的APP的templates目录中。如:
在这里插入图片描述
在上图的Django项目中,包含了blog, comment, config, typeidea四个APP,其中typeidea是和工程同名的APP,即工程目录,是在创建Django项目:django-admin startproject typeidea 时生成的工程目录,在该目录下还包含了settings.py, urls.py, wsgi.py等工程配置文件,我们也可以把它看成一个APP。
在此,我们可以把整个Django项目的所有模板文件都放在typeidea这个APP的templates目录下(记得要把typeidea这个APP配置到settings.py的INSTALLED_APPS 中),然后不同APP的模板文件分别用不同的文件夹进行区分,如上图所示,虽然blog, config这个两个APP的模板文件名字相同,但是他们分别放在blog,config两个不同的文件夹下,所以我们在视图函数中只要分别加上"blog/list.html"或者"config/list.html",就可以访问不同APP的"list.html"模板文件。
所以上面的视图函数更改为:

def post_list(request, category_id=None, tag_id=None):
    return render(request, 'blog/list.html', context={'name': 'post_list'})

即可访问blog这个APP的"list.html"模板文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值