摘要:通过使用来给子模板开放接口。必须是模板中的第一个出现的标签。如果出现重复代码,就应该考虑使用模板。尽可能多的定义,方便子模板实现更细的需求。
1、原始渲染
在django_lesson文件夹下新建一个django工程lesson2
(新建工程的详情请见Django-01、初识Django和搭建Django helloworld)
views.py
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render from django.views import View from django.http import HttpResponse # Create your views here. class CommonRenderHtml(View): def get(self, request): meg = " 这是一个原始的模版渲染方式 " return HttpResponse(meg)
urls.py
from django.conf.urls import url from django.contrib import admin from hello import views urlpatterns = [ url(r"^admin/", admin.site.urls), url(r"^common/$", views.CommonRenderHtml.as_view()), ]
效果如图所示
我们还可以直接将html文件输出到浏览器
在template下新建html文件
hello hello world
在urls.py中加入以下路由
url(r"^hellopage/$", views.HelloPageHtml.as_view()),
在views.py中加入以下视图类
class HelloPageHtml(View): def get(self, request): return render(request, "hello_page.html") # 从template文件夹开始
效果如下
views.py
#导入模块 from django.template.loader import get_template #添加视图 class LoginHtml(View): def get(self, request): t = get_template("login.html") return HttpResponse(t.render()) # 其中t.render()返回的是字符串
login.html
登录
urls.py
# 添加路由 url(r"^login/$", views.LoginHtml.as_view())
浏览器地址栏输入http://ip:8000/login/
ip表示ip地址
views.py
class RenderParam(View): def get(self, request): message = "尊敬的用户您好!" return render(request, "hello.html", context={"msg": message}) # 这里如果字典内容太多 我们可以用 context=locals()将当前能访问的所有局部变量转换成字典并赋给context context也可以不写
urls.py
url(r"^renderparam/$", views.RenderParam.as_view())
hello.html
hello {{ msg }}
标签语法:{% 标签名称 %}{% 结束标签名称 %}例: {%tag%}{%endtag%}
if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,来进行判断。
{% if message %} {{ message }} {% endif %}
{% if now %} 当前时间: {{ now|date:"Y-m-d H:i:s" }} {% endif %}
for…in…:跟python中的for…in…是一样的用法
{% for m in modules %} {{ m }} {% end %}
{% for day in days %} 今天是{{ day }}
{% endfor %}
------for 循环 字典 带items------- {% for day, thing in days_thing.items %} 今天是{{ day }}, 我们{{ thing }}
{% endfor %}
forloop.counter:当前迭代的次数,下标从1开始。
forloop.counter0:当前迭代的次数,下标从0开始。
forloop.first:返回bool类型,如果是第一次迭代,返回true,否则返回false。
forloop.last:返回bool类型,如果是最后一次迭代,返回True,否则返回False。
{% for day in days %} {% if forloop.first %} 这是这一个循环的第一个6.过滤器
{% endif %} {{ forloop.counter }}今天是{{ day }}
{% if forloop.last %} 这是一个循环的最后一个
{% endif %} {% endfor %}
作用:对变量进行过滤。在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量展示出来。
语法:{{greeting|lower}}
变量和过滤器中间使用管道符号”|”进行使用。
可以通过管道符号进行链式调用,比如实现一个功能,先把所有字符变成小写,把第一个字符转换成大写,代码如下:
{{message|lower|capfirst}}
过滤器可以使用参数,在过滤器名称后面使用冒号”:”再加上参数,比如要把一个字符串中所有的空格去掉,则可以使用cut过滤器,代码如下
{{message|cut:" "}}
ps: 使用参数的时候,冒号和参数之间不能有任何空格,一定要紧挨着。
{{ hello|upper }} {{ hello|lower }} {{ hello|capfirst }} ------ 使用过滤器的参数时,你不能有空格 ------- {{ hello|cut:" " }}
R和time过滤器格式
获取当前时间
import datetime
time_now = datetime.datetime.now()
------- date过滤器--------
{{ time_now|date:"Y-m-d H:i:s" }}
示例:
template.html
Template {% if day1 == "saturday" %} 今天星期六 出去浪 {% endif %}
{% if day2 == "saturday" %} 今天星期六 出去浪哦 {% elif day2 == "sunday" %} 今天星期天 继续出去浪 {% else %} 工作日 努力工作 一切为了周末浪 {% endif %}
{% for i, j in week.items %} {% if forloop.first %}
假装我是每周的第一天 {% endif %}
{{ forloop.counter }}.今天是{{ j }}({{ i }}) {% if forloop.last %}
假装我是每周的最后一天 {% endif %} {% endfor %}
{{ greet|upper }}
{{ greet|lower }}
{{ greet|capfirst }}
{{ greet|cut:" "}}
{{ time_now }}
{{ time_now|date:"Y-m-d H:i:s" }}
views.py添加以下视图类
class TemplateTag(View): def get(self, request): day1 = "saturday" day2 = "monday" week = { "monday": "星期一", "tuesday": "星期二", "wednesday": "星期三", "thursday": "星期四", "friday": "星期五", "saturday": "星期六", "sunday": "星期天" } greet = "good morning everybody, today is a nice day!" import datetime time_now = datetime.datetime.now() return render(request, "template.html", locals())
urls.py添加路由
url(r"^template/$", views.TemplateTag.as_view())
模板继承使用extends标签实现。通过使用block来给子模板开放接口。
extends必须是模板中的第一个出现的标签。
子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。
如果出现重复代码,就应该考虑使用模板。尽可能多的定义block,方便子模板实现更细的需求。
include另一个模板
{% include "menu.html" %}
修改hello_page.html
hello hello world {% block content %} {% endblock content %} {% block text %} {% endblock text %} {% include "login.html" %}
在template文件夹下添加一个extends.html文件
{% extends "hello_page.html" %} {% block js %} document.write("
hello") {% endblock js %} {% block content %}
这是个继承了hello_page.html的页面
{% endblock %}
在hello_page.html的body末尾加上以下代码
{% include "login.html" %}
在浏览器输入路由 /hellopage
注释标签
{#被注释的内容#}:将中间的内容注释掉。只能单行注释。
{% comment %}被注释的内容{% endcomment %}:可以多行注释。
html链接的相对路径与绝对路径
绝对路径
完整的一个路径就是绝对路径,即包含schema://host[:port#]/path/.../?query-string
例:http://news.sina.com.cn/world/
相对路径
第一个字符为斜杠/,
例:“/hello”, 这种会自动帮你添加你的协议名+域名+端口, 假设你的前一节为http://www.baidu.com:8000, 系统会自动匹配为"http://www.baidu.com:8000/hello"
我们实际情况中一般使用这种
第一个字符不带斜杠
例:“hello”, 这种会在当前url中path段往后添加,假设你当前路径http://www.baidu.com:8000/hello, 系统会自动匹配为“http://www.baidu.com:8000/hello/hello, ”
关于settings.py 文件中template的解释
TEMPLATES = [ { # 引擎,就是django自带的模版渲染模版 "BACKEND": "django.template.backends.django.DjangoTemplates", # 这个配置就是代表html文件存在目录 # 该路径是一个绝对路径 "DIRS": [os.path.join(BASE_DIR, "templates")] , # app内部的template是否启用 # 这个是为了兼容老版本所用,我们默认为True就可以了。 "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", ], }, }, ]
本文章代码
urls.py
from django.conf.urls import url from django.contrib import admin from hello import views urlpatterns = [ url(r"^admin/", admin.site.urls), url(r"^common/$", views.CommonRenderHtml.as_view()), url(r"^hellopage/$", views.HelloPageHtml.as_view()), url(r"^login/$", views.LoginHtml.as_view()), url(r"^renderparam/$", views.RenderParam.as_view()), url(r"^template/$", views.TemplateTag.as_view()), url(r"^extends/$", views.ExtendHtml.as_view()) ]
views.py
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render from django.views import View from django.http import HttpResponse from django.template.loader import get_template # Create your views here. class CommonRenderHtml(View): def get(self, request): meg = " 这是一个原始的模版渲染方式 " return HttpResponse(meg) class HelloPageHtml(View): def get(self, request): return render(request, "hello_page.html") class LoginHtml(View): def get(self, request): t = get_template("login.html") return HttpResponse(t.render()) class RenderParam(View): def get(self, request): message = "尊敬的用户您好!" return render(request, "hello.html", context={"msg": message}) class TemplateTag(View): def get(self, request): day1 = "saturday" day2 = "monday" week = { "monday": "星期一", "tuesday": "星期二", "wednesday": "星期三", "thursday": "星期四", "friday": "星期五", "saturday": "星期六", "sunday": "星期天" } greet = "good morning everybody, today is a nice day!" import datetime time_now = datetime.datetime.now() return render(request, "template.html", locals()) class ExtendHtml(View): def get(self, request): return render(request, "extends.html")
login.html
登录
template.html
Template {% if day1 == "saturday" %} 今天星期六 出去浪 {% endif %}
{% if day2 == "saturday" %} 今天星期六 出去浪哦 {% elif day2 == "sunday" %} 今天星期天 继续出去浪 {% else %} 工作日 努力工作 一切为了周末浪 {% endif %}
{% for i, j in week.items %} {% if forloop.first %}
假装我是每周的第一天 {% endif %}
{{ forloop.counter }}.今天是{{ j }}({{ i }}) {% if forloop.last %}
假装我是每周的最后一天 {% endif %} {% endfor %}
{{ greet|upper }}
{{ greet|lower }}
{{ greet|capfirst }}
{{ greet|cut:" "}}
{{ time_now }}
{{ time_now|date:"Y-m-d H:i:s" }}
extend.html
{% extends "hello_page.html" %} {% block js %} document.write("
hello") {% endblock js %} {% block content %}
这是个继承了hello_page.html的页面
{% endblock %}
hello.html
hello {{ msg }}
hello_page.html
hello hello world {% block content %} {% endblock content %} {% block text %} {% endblock text %} {% include "login.html" %}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41463.html
摘要:想到函数有延迟网络请求稀释事件延迟执行的效果,于是将模板函数用包裹起来,如下结果出现有意思的事情当请求比较频繁,在延迟时间内,本次请求得到的响应数据是上次请求的结果。 vue-cli 中使用 Mockjs 详解 背景 前端在早期jQuery时代时,前端功能和后端工程基本上都是合在一起,典型的就是常见的maven工程下面的webapp目录包含前端各类静态资源文件。这个时候,我们总是会遇...
摘要:,至此咱们的微信小程序的简单使用及了解算是分享完了,毕竟个人也是道行有限,没有钻研太深,这些只是本人在实际项目开发过程中用到和总结的经验,有太多不足或不对的地方,希望大家多多给予指出与改正,咱们一起来共同学习与进步 微信小程序是一种不需要下载安装即可使用的应用,在国内它在企业推广中的受欢迎度以及就这两年的使用及普及热度,然而就是因为它的备受欢迎度以及越来越被企业所重视,也就形成了咱们开...
摘要:,至此咱们的微信小程序的简单使用及了解算是分享完了,毕竟个人也是道行有限,没有钻研太深,这些只是本人在实际项目开发过程中用到和总结的经验,有太多不足或不对的地方,希望大家多多给予指出与改正,咱们一起来共同学习与进步 微信小程序是一种不需要下载安装即可使用的应用,在国内它在企业推广中的受欢迎度以及就这两年的使用及普及热度,然而就是因为它的备受欢迎度以及越来越被企业所重视,也就形成了咱们开...
阅读 2781·2021-09-26 10:18
阅读 5046·2021-09-22 15:02
阅读 2734·2019-08-30 15:53
阅读 1809·2019-08-29 18:41
阅读 2661·2019-08-27 10:58
阅读 2589·2019-08-26 13:49
阅读 2714·2019-08-26 12:17
阅读 875·2019-08-26 11:49