Django基于Pycharm开发之四[关于静态文件的使用,配置以及源码分析](原创)

Posted freewsf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django基于Pycharm开发之四[关于静态文件的使用,配置以及源码分析](原创)相关的知识,希望对你有一定的参考价值。

对于django静态文件的使用,如果开发过netcore程序的开发人员,可能会比较容易理解django关于静态文件访问的设计原理,个人觉得,这是一个middlerware的设计,但是在django中我们在配置中看到,他其实并不是放在middleware中配置的,反倒变成了一个app。

一 。先来看看关于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文件夹下,是这样的:

 

测试一下:

 

查看生成的链接,好了,现在按我们写的内容来显示链接地址了。


以上是关于Django基于Pycharm开发之四[关于静态文件的使用,配置以及源码分析](原创)的主要内容,如果未能解决你的问题,请参考以下文章

用pycharm+django开发web项目

Pycharm+Django+Python+MySQL开发 后台管理数据库

django中怎么载入css等静态文件

django中怎么载入css等静态文件

PyCharm 使用Github托管Django项目

测试开发框架之django基础