博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板的那些事
阅读量:6939 次
发布时间:2019-06-27

本文共 4038 字,大约阅读时间需要 13 分钟。

1.模板继承


 

在HTML里,我们经常会重复使用一个HTML页面的框架,然后在复制里面的代码,在粘贴到其他的页面里,这样既费力又费时,所以可以通过下面的方法,来改善这个问题,那么这个方法是什么呢?就是模板继承啦

模板继承是3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层。模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义的区块进行重载。

因此,模板继承的优势其实是设计基础模板中的区块(block)和子模板中替换这些区块。
每个区块由<block></block>标签组成,并且不支持block标签的嵌套。

那我们来简单的举例一下吧!

模板的父类

father.html

    
{% block title %} {% endblock %} #子类将会在{% block title %} {% endblock %}这里面填写子类网页的标题内容
{% block css %} {% endblock %} #子类将会在 {% block css %} {% endblock %}这里面填写子类网页的样式
模板之继承

模板的子类

 son1.html

{% extends 'father.html' %}    #告知继承的是master.html{% block title %}模板之继承{% endblock %}   #替换父类模板的{% block title %}{% endblock %}添加标题内容{% block css %}   #替换父类模板的{% block css %}{% endblock %}添加样式    {% endblock %}

到此为止,这就是模板的继承

2.模板导入


承接上文,既然模板继承已经知道,那么模板导入也变得很轻松

模板导入,什么是模板导入呢?我先举个例子吧,假如你在做一个项目,但是这个项目的所有.html文件中都要有一个div的模态框,然而,为了实现这个功能你不得不在每个html文件中重复写他,既耗力又费时,所以可以通过模板导入来完成这项工作,利用模板导入,可以用简短的语句条令,来完成很多重复复杂的任务!这就是它的便捷之处!

首先先创建一个模板,为了通俗易懂,没做那么多的修饰

tag.html

son1.html

{% extends 'father.html' %}{% block titel %}子类{% endblock %}{% block css %}{% endblock %}{% block content %}    
    {% for u in user_list %}
  • {
    { u }}
  • {% endfor %}
{% include 'tag.html' %} #导入之前创建的模板,可以在这个页面中显示tag.html的所创建的样式{% endblock %}

 3.模板的执行


 

模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。

def current_datetime(request):    now = datetime.datetime.now()    html = "It is now %s." % now    return HttpResponse(html)
View Code
from django import templatet = template.Template('My name is {
{ name }}.')c = template.Context({
'name': 'Adrian'})print t.render(c)
View Code
import datetimefrom django import templateimport DjangoDemo.settings now = datetime.datetime.now()fp = open(settings.BASE_DIR+'/templates/Home/Index.html')t = template.Template(fp.read())fp.close()html = t.render(template.Context({
'current_date': now}))return HttpResponse(html
View Code
from django.template.loader import get_templatefrom django.template import Contextfrom django.http import HttpResponseimport datetime def current_datetime(request):    now = datetime.datetime.now()    t = get_template('current_datetime.html')    html = t.render(Context({
'current_date': now})) return HttpResponse(html)
View Code
return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))
View Code

4.模板语言


 

模板中也有自己的语言,该语言可以实现数据展示

·{

{ item }}
·{% for item in item_list %}  <a>{
{ item }}</a>  {% endfor %}
  forloop.counter
  forloop.first
  forloop.last 
·{% if ordered_warranty %}  {% else %} {% endif %}
·母板:{% block title %}{% endblock %}
  子板:{% extends "base.html" %}
   {% block title %}{% endblock %}
·帮助方法:
  {
{ item.event_start|date:"Y-m-d H:i:s"}}
  {
{ bio|truncatewords:"30" }}
  {
{ my_list|first|upper }}
  {
{ name|lower }}

 5.自定义simple_tag


 

a、首先在app中创建templatetags模块(模块名字一定是templatetags

b、然后在templatetags里创建任意 .py 文件,如:xx.py

from django import templatefrom django.utils.safestring import mark_safe   register = template.Library()   @register.simple_tagdef my_simple_time(v1,v2,v3):    return  v1 + v2 + v3@register.filterdef sutaoyu(a1,a2):    return a1+a2

c、在使用自定义simple_tag、filter的html文件中导入之前创建的 xx.py 文件名

{% load xx %}

d、在html文件中使用simple_tag、filter

{% load xx %}        #在使用自定义simple_tag、filter的html文件中导入之前创建的 xx.py 文件名    
Title {% jiajingze 2 3 4%} #使用simple_tag {
{ 'maliya'|sutaoyu:"LS" }} #使用fifter

e、在settings中配置当前app,不然django无法找到自定义的simple_tag、fifter

INSTALLED_APPS = (    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'app01',      #配置app}

f、simple_tag和fifter的优缺点

     simple_tag:

          缺点:

                 不能作为if条件
          优点:
                 参数任意

     fifter:

 

          缺点:

                 最多两个参数,不能加空格
          优点:
                 能作为if条件

转载于:https://www.cnblogs.com/zhuifeng-mayi/p/9047327.html

你可能感兴趣的文章
用javascript实现jquery的trim方法
查看>>
数据表更新
查看>>
【51NOD-5】1293 球与切换器
查看>>
操作系统原理4——存储管理
查看>>
[3D跑酷] UI事件处理系统
查看>>
Quartus II 软件生成FFT、NCO、FIR等IP核时卡住不动的解决办法
查看>>
【MyEcplise】新装系统,新装的myEcplise使用原来的workspace和maven库,项目没错但是引用的包不能正确找到...
查看>>
进程基础复习01
查看>>
JAVA MessageDigest MD5 SHA
查看>>
暑假练习:Uva437
查看>>
Android 屏幕自适应方向尺寸
查看>>
java 泛型好文收集
查看>>
Eclipse使用技巧总结(四)——代码重构专题
查看>>
如何将iOS应用发布到App Store详解
查看>>
MyEclipse 编码设置
查看>>
Tcp
查看>>
Shell基本知识
查看>>
POJ 1488
查看>>
删除Azure Active Directory
查看>>
ReLu(Rectified Linear Units)激活函数
查看>>