django制作网页(5)加载静态文件

lesson41

一、基础知识:django标准库contrib:

1、Django的标准库存放在 django.contrib 包中。每个子包都是一个独立的附加功能包。 这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其他子包。

2、在 django.contrib 中对函数的类型并没有强制要求 。其中一些包中带有模型(因此需要你在数据库中安装对应的数据表),但其它一些由独立的中间件及模板标签组成。

3、django.contrib 开发包共有的特性是: 就算你将整个django.contrib开发包删除,你依然可以使用 Django 的基础功能而不会遇到任何问题。

4、当 Django 开发者向框架增加新功能的时,他们会严格根据这一原则来决定是否把新功能放入django.contrib中。

5、标准库contrib子包如下:

  • admin : 自动化的站点管理工具。
  • admindocs : 为Django admin站点提供自动文档。
  • auth : Django的用户验证框架。https://docs.djangoproject.com/en/1.11/ref/contrib/auth/
  • comments : 一个评论应用,关于这个应用的更多信息请参见Django的官方网站。
  • contenttypes : 这是一个用于引入文档类型的框架,每个安装的Django模块作为一种独立的文档类型。 这个框架主要在Django内部被其他应用使用,它主要面向Django的高级开发者。可以通过阅读源码来了解关于这个框架的更多信息,源码的位置在 django/contrib/contenttypes/。
  • csrf : 这个模块用来防御跨站请求伪造(CSRF)。
  • databrowse:帮助你浏览数据的Django应用。
  • flatpages : 一个在数据库中管理单一HTML内容的模块。
  • formtools : 一些列处理表单通用模式的高级库。
  • gis : 为Django提供GIS(Geographic Information Systems)支持的扩展。 举个例子,它允许你的Django模型保存地理学数据并执行地理学查询。请参看http://geodjango.org/上的文档。
  • humanize : 一系列 Django 模块过滤器,用于增加数据的人性化。
  • localflavor:针对不同国家和文化的混杂代码段。例如,它包含了验证美国的邮编 以及爱尔兰的身份证号的方法。
  • markup : 一系列的 Django 模板过滤器,用于实现一些常用标记语言。
  • redirects : 用来管理重定向的框架。
  • sessions : Django 的会话框架。
  • sitemaps : 用来生成网站地图的 XML 文件的框架。
  • sites : 一个让你可以在同一个数据库与 Django 安装中管理多个网站的框架。
  • syndication : 一个用 RSS 和 Atom 来生成聚合订阅源的的框架。
  • webdesign : 对设计者非常有用的Django扩展。到编写此文时,它只包含一个模板标签{% lorem %}。
  • staticfiles:

    The staticfiles app

    django.contrib.staticfiles collects static files from each of your applications (and any other places you specify) into a single location that can easily be served in production.

    https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/

    Settings

    See staticfiles settings for details on the following settings:

STATIC_ROOT

STATIC_URL

STATICFILES_DIRS

STATICFILES_STORAGE

STATICFILES_FINDERS

……

二、django项目setting.py中:

(1)INSTALLED_APPS项中增加:django.contrib.staticfiles。

(2)INSTALLED_APPS项中增加:自增加的app名称。例:项目中已自定义APP,名称:r_fin。

(3)文件最下一行设置:STATIC_URL = '/static/'

在浏览器中请求静态文件的url。例:127.0.0.1/static/1.jpg。加上此行语句,系统将在项目下的每个app中的static文件中去寻找匹配的文件。

https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/

STATIC_URL:

Default: None

URL to use when referring to static files located in STATIC_ROOT.

Example: "/static/" or "http://static.example.com/"

If not None, this will be used as the base path for asset definitions (the Media class) and the staticfiles app.

It must end in a slash if set to a non-empty value.

You may need to configure these files to be served in development and will definitely need to do so in production.

对应相关操作:app下添加static文件夹

通过python manage.py startapp [app名称]命令,新建django项目app,每一个app并未默认自动生成static文件夹,需要到每个app文件夹下手动添加。

并且,由于多个app下static文件夹下可能存在的同名文件,造成STATIC_URL变量无法区分。需要在static文件夹下新建一个与本app同名的(建议“同名”,并非强制)子文件夹。例:app名为r_fin,在其下面新建“static/r_fin”文件夹,该app的一个1.jpg静态文件存放路径为:static/r_fin/1.jpg。

(4)添加STATICFILES_DIRS变量

一些静态文件不隶属项目中任何app,在setting.py文件中添加STATICFILES_DIRS变量(或称属性),以后DTL就会在这个列表的路径中查找静态文件。

例:在项目级别目录下,新建一个与项目的app同级别目录名称为“static”文件夹(当然也可取别的名称,参数值也做修改)。

STATICFILES_DIRS=[os.path.join(BASE_DIR,"static"]

小技巧:通过此属性,不在各app中新建static文件夹,直接在此static下新建以对应app同名的子文件夹“static/app名称”,将对应静态文件放入。此种方法便于静态文件集中管理,提高效率

STATICFILES_DIRS说明:

Default: [] (Empty list)

This setting defines the additional locations the staticfiles app will traverse if the FileSystemFinder finder is enabled, e.g. if you use the collectstatic or findstatic management command or use the static file serving view.

This should be set to a list of strings that contain full paths to your additional files directory(ies) e.g.:

settings.Py文件添加内容如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'r_fin',


STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]


STATIC_URL = '/static/'

三、加载静态文件其他操作

(5)模板中使用load加载static标签。

static不是django内置标签,所以需要在每个模板中都要用load命令加载static标签。

否则,将提示错误:Invalid block tag on line 7 : 'static'. Did you forget to register or load this tag?

例:在项目static文件夹下先建一个css文件。

body{
    background-color: lightblue;
    #background-image: url('2.png')

}

例:然后在项目templates文件夹下建立一个示例html文件。

在模板1.html中加载static标签,加载项目static文件夹中的style.css文件(app/static文件夹中文件)。

{%load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'indexsjpa.css' %}">
</head>
<body>
<img  width=194 height=194, src="{% static 'a.jpg' %}" alt="">
#img 后边不允许加逗号
</body>
</html>

(6)将static标签注册为内置django内置标签

如果不想每次在模板中都使用load加载static标签。可在settings.py中的templates/options添加"builtins":['django.templatetags.static'],这样模板中可直接使用static标签,不再用手动load。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'builtins':[
                'django.templatetags.static'
            ]

        },
    },
]

(7)如果没有在settings.py中的INSTALLED_APPS添加'django.contrib.staticfiles',需要手动将请求静态文件的url与静态文件路径进行映射。代码如下:

from django.conf import settings

from django.conf.urls.static import static

注:有时页面内容已经修改,用F5不能反映页面修改内容,用ctrl+shift+r, 或者ctrl+f5, 强制刷新页面后即可。

django的templatetags - 曾春云 - 博客园  https://www.cnblogs.com/zengchunyun/p/6861293.html

Custom template tags and filters | Django documentation | Django  https://docs.djangoproject.com/en/1.10/howto/custom-template-tags/

浅谈Django自定义模板标签template_tags的用处_python_脚本之家  https://www.jb51.net/article/131049.htm

发布了306 篇原创文章 · 获赞 114 · 访问量 117万+

猜你喜欢

转载自blog.csdn.net/sjpljr/article/details/102966217