Django框架——模板渲染与静态文件

html链接的 绝对历经 与 相对路径

绝对路径:

相对路径:

第一个字符不带斜杠
例如:”hello”,这种会在当前url中path段往后添加,假设你当前路径http://www.baidu.com:8000/hello, 系统会自动匹配为“http://www.baidu.com:8000/hello/hello, ”。

settings中模板路径配置

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',
            ],
        },
    },
]

views渲染返回页面的三种方法

  • 原始的:直接将html字符串硬编码到HttpResponse中。
class Login(View):
    def get(self, request):
        return HttpResponse("<h1>hello world</h1>")
  • 使用render进行渲染。
class Login(View):
    def get(self, request):
        return render(request, "login.html")
  • 使用django.template.loader下的get_template方法进行渲染。
class Login(View):
    def get(self, request):
        t = get_template("login.html")
        return HttpResponse(t.render())

模板引擎的选择:
django自带一套模板系统,叫做DTL(Django Template Language),此外python还有一套模板引擎:Jinja2。
具体使用哪一套模板系统可以在settings中进行配置:

  • 在settings文件中的TEMPLATES->BACKEND进行配置,默认使用的是django自带的DTL。配置DTL:’BACKEND’:
    ‘django.template.backends.django.DjangoTemplates’,配置Jinja2:django.template.backends.jinja2.Jinja2
TEMPLATES = [
    {
        www',
        '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',
            ],
        },
    },   
]

模板变量

在模板中定义变量的方法:

  • 语法:{{变量名}}
  • 命名由字母和数字以及下划线组成,不能有空格和标点符号。
  • 不要和python或django关键字重名。

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{ message }}
</body>
</html>

模板标签

  • 标签语法:{% 标签名称 %}{% 结束标签名称 %}例: {%tag%}{%endtag%}
  • if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,来进行判断。ifequal/ifnotequal

例如:

{% if now %}
当前时间: {{ now|date:"Y-m-d H:i:s" }}
{% endif %}

for…in…:跟python中的for…in…是一样的用法

{% for m in modules %}
{{ m }}
{% end %}

过滤器

  • 作用:对变量进行过滤。在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量展示出来。
  • 语法:{{greeting|lower}}
  • 变量和过滤器中间使用管道符号”|”进行使用。
  • 可以通过管道符号进行链式调用,比如实现一个功能,先把所有字符变成小写,把第一个字符转换成大写,代码如下:{{message|lower|capfirst}}
  • 过滤器可以使用参数,在过滤器名称后面使用冒号”:”再加上参数,比如要把一个字符串中所有的空格去掉,则可以使用cut过滤器,代码如下
    • {{message|cut:" "}}PS:使用参数的时候,冒号和参数之间不能有任何空格,一定要紧挨着。

模板继承

  • 模板继承使用extends标签实现。通过使用block来给子模板开放接口。
  • extends必须是模板中的第一个出现的标签。
  • 子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。
  • 如果出现重复代码,就应该考虑使用模板。尽可能多的定义block,方便子模板实现更细的需求。

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    {% block js %}
    {% endblock js %}
</head>
<body>
{% block content %}
{% endblock content %}
</body>
</html>

login.html

{% extends "base.html" %}
{% block content %}
        这是一个登录页面
{% endblock %}

include另一个模板

{% include "menu.html" %}

注释标签

  • {#被注释的内容#}:将中间的内容注释掉。只能单行注释。
  • {% comment %}被注释的内容{% endcomment %}:可以多行注释。

自定义过滤器

  • DTL模板语言生来只是为了方便的展示信息,所以与编程语言相比显得有点薄弱,有时候不能满足我们的需求。因此django提供了一个接口,让开发者能自定义标签和过滤器。
  • 首先,你需要添加一个templatetags的文件夹,自定义过滤器必须处在已经安装了的app中的一个名叫”templatetags”的包(文件夹)中。因此可以有两种选择:
    • 一种是放在其他已经安装了的app中。这种方式简单,但不方便管理。
    • 单独创建一个app,用来存放所有的自己定义的过滤器。

比如,我们现在有一个account的app

account
├── admin.py
├── apps.py
├── __init__.py
├── __init__.pyc
├── migrations
│   └── __init__.py
├── models.py
├── templatetags
│   ├── custom_tags.py
│   └── __init__.py

需要使用自定义过滤器,必须把对应的app加载,在settings中添加该app,假设我需要使用account下的自定义标签

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

添加对应的自定义标签

#装饰器方法仅适用于 使用def函数渲染模板的时候,不适用于View.
from django import template
register = template.Library()
@register.filter
def mycut(value, args):
    return value.replace(args, "").lower()

ps: register = template.Library() register的命名是固定的,不能修改

在模版中使用

{{ name|mycut:" " }}

ps: 创建完templatetags模块后,你需要重启服务器。
ps: 在模板中加载的是过滤器所在的文件名,而不是app的名称。
ps: pycharm创建文件夹时,不会自动上传


模板加载静态文件

  • 在项目添加一个静态文件夹,并添加需要添加的静态文件(一般名叫static)
  • 配置静态文件settings:
    • STATICFILES_DIRS = [
      os.path.join(BASE_DIR, "static")
      ]

在需要使用的html模版头部中添加导入

{% load static %}

使用

<script src="{% static '/js/jquery.min.js' %}"></script>

ps: 引入的路径是一个相对路径

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django框架的配置文件模板(settings.py)如下: ```python import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = 'your-secret-key-here' DEBUG = True ALLOWED_HOSTS = [] INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'your_project.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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', ], }, }, ] WSGI_APPLICATION = 'your_project.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True STATIC_URL = '/static/' ``` 在模板中,你需要将 `your-secret-key-here` 替换为你自己的密钥,以确保应用程序的安全性。你还需要根据应用程序的需求更改其他配置选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值