购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2.1 处理静态文件和媒体文件

独立编写的CSS样式文件存放在项目中的什么位置?CSS、JS、素材图片(非用户上传)、网站图标等文件都属于静态文件,可以放入预先创建的“static”文件夹中。在开发阶段,“static”可以放在Web应用目录下(例如,当前项目的“中华古诗”目录)。同时放入“static”目录中的还有站点图标文件,名称必须是“favicon.ico”,如图4-9所示。

图4-9 Web应用中的静态文件目录

提示

“style.css”与“favicon.ico”文件在随书资源中获取。

此时的静态文件还不能直接访问,必须在项目的配置文件“settings.py”中指定静态文件的路径。默认已自动生成以下配置。

这样配置完毕之后,当用户访问网站加载静态文件时,Django会自动到Web应用目录中寻找“static”文件夹,读取静态文件。所以,Web应用中静态文件目录的名称必须是“static”。但是,如果在开发阶段将静态文件放在了项目目录的“static”文件夹或者其他文件夹中,则需要再添加一条配置代码,指定静态文件的存放位置。

这样配置完毕之后,Django会先到“STATICFILES_DIRS”列出的所有目录位置中寻找静态文件,如果未能找到,则会继续到Web应用目录中的“static”文件夹中寻找。

另外,当前项目还有很多关于古诗作者的图片,在数据库中包含这些图片的路径,如图4-10所示。

图4-10 作者图片的路径数据

这些图片其实是添加作者数据时上传的图片,它们需要统一放入媒体文件目录“media”中,如图4-11所示。

图4-11 项目目录中的media文件目录

提示

所涉及的作者图片需要读者在随书资源中获取,并添加到当前项目中。

Django之所以能够自动到Web应用目录中寻找静态文件,是因为在配置文件“settings.py”中添加了一个App负责这项工作。

在“INSTALLED_APPS”配置项的列表中能够看到装载了“django.contrib.staticfiles”。但是,媒体文件并没有专门的程序进行处理。将媒体文件统一放在项目目录的“media”文件夹中,并且,同样需要添加路径的配置。

但是,这样配置之后,仍然不能正常访问媒体文件。例如,尝试打开一个作者的图片:http://127.0.0.1/media/author_img/tang-gong.jpg。如图4-12所示,异常信息说明当前路径未能够正确匹配。这是因为在Web应用的“urls.py”文件中还没有添加路径“media/”的匹配规则。

图4-12 页面异常信息

打开“urls.py”文件,在已有代码的基础上,新增以下代码。

在这段代码中,“<path:path>”代表“media/”之后的任意路径。前面的“path”是一个自定义的名称,后面的“path”是路径转换器的一种,用于匹配非空字段,包括路径分隔符“/”。在视图函数中,可以通过名称“path”获取匹配到的内容。

注意,只有在开发阶段中才需要对媒体文件做这样的处理,正式发布站点后,媒体文件会交由Web服务器(例如Nginx)进行处理。所以,代码中添加了条件判断,只有调试模式下才会增加“media/”的路径匹配的规则。

另外,Django提供了一个辅助函数“static”,同样能够实现媒体文件的访问,并让代码变得更加简便。

我们可以用这段新的代码完全替代上一段代码。 YqyusYbYfCPOO8iIoQSJ6U8znF9Ev/hZWNOvT3yZIC1bHQMgjeQ+dUvvWPSGOgfi

点击中间区域
呼出菜单
上一章
目录
下一章
×