Django基于Pycharm开发之四[关于静态文件的使用,配置以及源码分析](原创)
2018-03-10 01:25
1111 查看
对于django静态文件的使用,如果开发过netcore程序的开发人员,可能会比较容易理解django关于静态文件访问的设计原理,个人觉得,这是一个middlerware的设计,但是在django中我们在配置中看到,他其实并不是放在middleware中配置的,反倒变成了一个app。
一 。先来看看关于static静态文件的搜索原理以及为什么默认可以找到static文件夹下的静态文件
load static 这个指令是通过: django/templatetags/static.py 来加载配置中的静态文件的目录的,具体是通过这个源码来实现的:
一 。先来看看关于static静态文件的搜索原理以及为什么默认可以找到static文件夹下的静态文件
<link rel="stylesheet" type="text/css" href="{% static 'polls/css/polls.css' %}"/> 按住ctrl+鼠标左键,pycharm会帮你导航到
load static 这个指令是通过: django/templatetags/static.py 来加载配置中的静态文件的目录的,具体是通过这个源码来实现的:
class ConfiguredStorage(LazyObject): def _setup(self): self._wrapped = get_storage_class(settings.STATICFILES_STORAGE)() staticfiles_storage = ConfiguredStorage()
settings.STATICFILES_STORAGE 可以查看global_setting.py来找到配置,如果project的setting.py没有任何配置的话,而
global_setting.py是引用了 /django/contrib/staticfiles/finders.py 这个包的,在这个包里面,我们可以找到这个:
class AppDirectoriesFinder(BaseFinder): """ A static files finder that looks in the directory of each app as specified in the source_dir attribute. """ storage_class = FileSystemStorage source_dir = 'static' def __init__(self, app_names=None, *args, **kwargs): # The list of apps that are handled self.apps = [] # Mapping of app names to storage instances self.storages = OrderedDict() app_configs = apps.get_app_configs() if app_names: app_names = set(app_names) app_configs = [ac for ac in app_configs if ac.name in app_names] for app_config in app_configs: app_storage = self.storage_class( os.path.join(app_config.path, self.source_dir)) if os.path.isdir(app_storage.location): self.storages[app_config.name] = app_storage if app_config.name not in self.apps: self.apps.append(app_config.name) super().__init__(*args, **kwargs)
在这里,我们就知道为什么默认django会找这个static的目录去解析静态文件了 二。比如我们配置了
STATIC_URL = '/staticsaaaa/' STATIC_ROOT = os.path.join(BASE_DIR, 'statics') STATICFILES_DIRS = (os.path.join(BASE_DIR, 'polls/staticpolls'),) 比如这样,那么,初始化的时候,静态文件的解析路径,将会按照 配置的格式来解析,可以看到,我在POLLS这个APP中,我故意将静态文件放在了staticpolls文件夹下,是这样的:
测试一下:
查看生成的链接,好了,现在按我们写的内容来显示链接地址了。
相关文章推荐
- Flume NG源码分析(一)基于静态properties文件的配置模块
- 使用pycharm手动搭建python语言django开发环境(三) 使用django的apps应用 添加应用静态文件
- Django1.4关于静态文件(css.js等)和模板路径的配置
- 关于Liferay的配置文件 —— 基于Struts开发Portlet
- Django 开发之pycharm注册码以及django初始配置
- Django 开发之pycharm注册码以及django初始配置
- WCF开发-使用证书文件配置基于自定义X509证书验证的消息安全模式
- 关于纯代码开发和使用storyboard以及xib的优劣分析
- django1.5开发环境static静态文件配置
- 基于TCP网络通信的自动升级程序源码分析--生成升级文件相关的配置文件
- 第二人生的源码分析(六十九)使用LLXmlTree类来分析XML配置文件
- Django基于Pycharm开发之二 [使用django adminSite]
- [原创]从程序员角度分析安徽电信HTTP劫持的无耻行径,以及修改Hosts文件,使用OPENDNS无效情况下的解决方案
- 在eclipse3.7中配置hadoop1.0.1插件 Hadoop 源码分析 使用java api操作Hadoop文件
- [原创]从程序员角度分析安徽电信HTTP劫持的无耻行径,以及修改Hosts文件,使用OPENDNS无效情况下的解决方案
- 基于TCP网络通信的自动升级程序源码分析--生成升级文件相关的配置文件
- 第二人生的源码分析(六十九)使用LLXmlTree类来分析XML配置文件
- 从源码角度深入分析log4j配置文件使用
- Django1.4关于静态文件(css.js等)和模板路径的配置