Home  >  Article  >  Backend Development  >  Detailed explanation of calling static files in Django learning

Detailed explanation of calling static files in Django learning

不言
不言Original
2018-05-08 13:44:031782browse

This article mainly introduces the detailed explanation of calling static files for Django learning. It has certain reference value. Now I share it with you. Friends in need can refer to it.

Preface

Static files refer to js, ​​css, pictures, videos and other files in the website. This article mainly introduces the relevant content about static file calling in Django learning and shares it with everyone. Reference study, not much to say below, let’s take a look at the detailed introduction

The method is as follows

1.settings .py static file related sample code and instructions:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
 
STATIC_URL = '/static/'
 
# 当运行 python manage.py collectstatic 的时候
# STATIC_ROOT 文件夹 是用来将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制过来
# 把这些文件放到一起是为了用apache等部署的时候更方便
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')
 
# 其它 存放静态文件的文件夹,可以用来存放项目中公用的静态文件,里面不能包含 STATIC_ROOT
# 如果不想用 STATICFILES_DIRS 可以不用,都放在 app 里的 static 中也可以
STATICFILES_DIRS = (
 os.path.join(BASE_DIR, "common_static"),
 '/path/to/others/static/', # 用不到的时候可以不写这一行
)
 
# 这个是默认设置,Django 默认会在 STATICFILES_DIRS中的文件夹 和 各app下的static文件夹中找文件
# 注意有先后顺序,找到了就不再继续找了
STATICFILES_FINDERS = (
 "django.contrib.staticfiles.finders.FileSystemFinder",
 "django.contrib.staticfiles.finders.AppDirectoriesFinder"
)

##2.STATIC_ROOT

STATIC_ROOT = os.path.join(BASE_DIR, 'collect_static')#BASE_DIR是项目的绝对地址

STATIC_ROOT is the directory where all static files are aggregated when deploying static files (pyhton manage.py collectstatic).

STATIC_ROOT should be written as an absolute address. Here, for example, mine The project mysite is /home/mysite/, then STATIC_ROOT is /home/mysite/collect_static/

When deploying the project, enter in the terminal:

python manage.py collectstatic

django will copy all static files to the STATIC_ROOT folder

3.STATICFILES_DIRS

STATIC_ROOT only comes into play during deployment, but in actual situations , there are two general placement locations for static files:

1. One is to create a new static folder in each app and put the static files in it. When loading static files, for example, in the template Static files are used in

django will automatically search for the static folder in each app (so, don’t write the wrong name of the folder, otherwise django will not be able to find your folder

2. Another option is to create a public folder outside all app files. Because some static files are not unique to a certain app, you can put them in

In a public folder for easy management (note that creating a public static file folder is just a way to facilitate management, but it is not necessary.

app can apply static files across apps because Finally, all static files will exist in STATIC_ROOT) The question now is how to let

django know that you put some static files in public folders other than app, then you need to configure STATICFILES_DIRS


STATICFILES_DIRS = (
 os.path.join(BASE_DIR, 'common_static'),
)

STATICFILES_DIRS tells django to first look for static files in STATICFILES_DIRS, and then look for them in the static folder of each app (note that django looks for static files It is a lazy search. It stops searching when it finds the first one)


3.STATIC_URL

So far, the static file mechanism can work, but there is one Question, can I directly access the static files in my project through URL? The answer is definitely yes, but please note that you are accessing it in the browser, and you cannot enter the local absolute address of your static files, for example The local address of one of my pictures is /home/mysite/common_static/myapp/photo.png


Then it is impossible for others to directly enter it on the browser:

http://192.168. 1.2:8000/home/mysite/common_static/myapp/photo.png

In this way, the browser will report an error, there is no such page


So how does django allow browsing The browser can also access static files on the server. As mentioned before, direct access to the local address of the server is not possible, so a mapping is needed. Django uses STATIC_URL to allow the browser to directly access static files, such as:

STATIC_URL = '/static/'

Then you can enter on the browser:

http://192.168.1.2:8000/static/common_static/myapp/photo.png

Then it is equivalent to accessing /home/mysite/common_static/myap/photo.png

So on the browser, use the specific content of the prefix STATIC_URL to map STATIC_ROOT,

HTTP: //192.168.1.2:8000/static is equivalent to STATIC_ROOT of the local address

Related recommendations:

A brief analysis of STATIC_ROOT, STATIC_URL and STATICFILES_DIRS in Django

The above is the detailed content of Detailed explanation of calling static files in Django learning. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn