AjaxControlToolkit控件集详解

转载:AjaxControlToolkit控件集详解

上篇首要介绍了django的M电视机模型,主要介绍了视图层之路由安排种类url分发和视图层之视图函数view,本篇首要讲师M电视模型中的模版层template。

AjaxControlToolkit下载
http://ajax.asp.net/downloads/default.aspx?tabid=47
http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=1425

 

环境设置如下:下载完 ASPAJAXExtSetup.msi
安装更新后在您的种类盘下的(以C盘为例) 出现这些 文件夹:C:/Program
Files/Microsoft asp.NET/ASP.NET 2.0 ajax
Extensions/v1.0.61025安装那些后大家就能够创造Asp.net
AJAXEnabledWebSite站点了,这实则正是个ajax.net网站的模版。不过大家后天还不能够选取微软给大家付出好的ajax控件
。要想掌握怎么利用ajax.net控件往下看。下载AjaxControlToolkit
,上面八个3个是带源代码的 1个是不带源代码的toolkit。建议下载带源代码的
toolkit。下载达成后把该文件解压到:
C:/Program Files/Microsoft asp.NET/ASP.NET 2.0 ajax
Extensions/v1.0.61025/AjaxContronlToolkit/

本篇导论:

双击运维AjaxControlToolkit.sln。用vs二〇〇七开辟那几个sln,编写翻译TemplateVSI那些类型后,把在C:/Program
Files/Microsoft asp.NET/ASP.NET 2.0 AJAX
Extensions/SampleWebSite/Bin下面生成的AjaxControlToolkit.dll和
AjaxControlToolkit.pdb复制到C:/Program Files/Microsoft asp.NET/ASP.NET
2.0 AJAX
Extensions/Binaries文件夹下边,那样我们就能够在vs贰零零伍中使用ajax.net那么些控件了。
新建二个Ajax ControlToolkitWebSite
类型的web项目。在工具栏中新添加1个取舍卡起名:AjaxControltoolkit
在那些选项卡上右键选拔项-》浏览找到刚才复制过去的AjaxControlToolkit.dll,添加进去。那样大家就ajax.net控件成功引用到vs二零零六中了

1.Accordion
效果:完毕了QQ、Msn好友分类的折叠成效,就如包含了三个CollapsiblePanels
细节: (1)不要把杰德ion放在Table种同时又把 FadeTransitions
设置为True,这将引起布局散乱
(2)每一个 AccordionPane control 有一个Header 和Content的 template
(3)在Content中得以开始展览自由扩展,你如何都足以放上^_^
(4)有三种AutoSize modes :None(推荐) Limit Fill
(5)Regalion表现的更像是一个容器

 

代码示意:

模版层(template)

 

 

图片 1<ajaxToolkit:Accordion runat=”server” SelectedIndex=”0″ HeaderCssClass=”accordionHeader”
图片 2ContentCssClass=”accordionContent” FadeTransitions=”false” FramesPerSecond=”40″
图片 3TransitionDuration=”250″ AutoSize=”None”>
图片 4<Panes>
图片 5<ajaxToolkit:AccordionPane runat=”server”>
图片 6<Header>
图片 7<a href=”” false;” >1. Accordion</a></Header>
图片 8<Content>
图片 9</Content>
图片 10</ajaxToolkit:AccordionPane>
图片 11</Panes>
图片 12</ajaxToolkit:Accordion> 
图片 13

一 、模版简介

  1. AlwaysVisibleControl
    效用:最多的利用是在线小说的目录和麻烦的转移小广告
    细节: (1)防止控件闪烁,把这一个控件要在目的地点时采纳absolutely
    position
    (2) HorizontalSide=”Center” VerticalSide=”Top”
    使用这几个办法控制转变在怎样地方

一 、在大家事先写的代码还有没有记念最终回到是2个网页(上篇小说)

代码示意:

示例:

图片 14<cc1:AlwaysVisibleControlExtender HorizontalSide=”Center” VerticalSide=”Top” TargetControlID=”Panel1″ runat=”server”>

def index(request):
    name="yuan"
    return render(request,"index.html",{"n":name})

 

每回大家创制3个新品类的时候路径下都会自带一个templates,没错那么些文件夹正是用来放大家的html代码的。

3.Animation
效果:叁13个控件种效用最酷的!顾名思义完毕动画效果
细节: (1)不只是控件:pluggable, extensible framework
(2)用在哪些时候:OnLoad OnClick OnMouseOver OnMouseOut OnHoverOver
OnHoverOut
(3)具体使用有许多得以谈的,有理由单独写1个Animation Xml 编程介绍

于是说我们开首的讲模版正是html代码+模版语法

代码示意:

模版包涵在应用时会被值替换掉的 变量,和操纵模版逻辑的 标签。

图片 15<ajaxToolkit:AnimationExtender 
图片 16runat=”server” TargetControlID=”ctrl”>
图片 17<Animations>
图片 18<OnLoad> </OnLoad>
图片 19<OnClick> </OnClick>
图片 20<OnMouseOver> </OnMouseOver>
图片 21<OnMouseOut> </OnMouseOut>
图片 22<OnHoverOver> </OnHoverOver>
图片 23<OnHoverOut> </OnHoverOut>
图片 24</Animations>
图片 25</ajaxToolkit:AnimationExtender>

二 、还有你或然曾经注意到我们有三个事例视图中回到文本的章程某个尤其。(上篇小说)

 

也等于说,HTML被直接硬编码在
Python代码之中:

4.CascadingDropDown
功能:DropDownList联动,调用Web Service
细节: (1)DropDownList行为扩大
(2)倘使选拔Web service 方法签名必须符合上面包车型地铁款式:
[WebMethod]
public CascadingDropDownNameValue[] GetDropDownContents(
string knownCategoryValues, string category){…}

from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

代码示意:

就算那种技术便利解释视图是怎么着工作的,但一向将HTML硬编码到你的视图里却并不是一个好处理格局。

图片 26<ajaxToolkit:CascadingDropDown runat=”server” TargetControlID=”DropDownList1″ Category=”Make” PromptText=”Please select a make” LoadingText=”[Loading makes]” ServicePath=”CarsService.asmx” ServiceMethod=”GetDropDownContents”/>
图片 27<ajaxToolkit:CascadingDropDown runat=”server” TargetControlID=”DropDownList2″ Category=”Model” PromptText=”Please select a model” LoadingText=”[Loading models]” ServiceMethod=”GetDropDownContentsPageMethod” ParentControlID=”DropDownList1″/>
图片 28<ajaxToolkit:CascadingDropDown runat=”server” TargetControlID=”DropDownList3″ Category=”Color” PromptText=”Please select a color” LoadingText=”[Loading colors]” ServicePath=”~/CascadingDropDown/CarsService.asmx” ServiceMethod=”GetDropDownContents” ParentControlID=”DropDownList2″/>

叁 、HTML被一向硬编码在
Python代码中的缺点

 

1)对页面设计开始展览的其余变动都必须对 Python
代码举办对应的改动。 站点设计的改动往往比底层 Python
代码的修改要反复得多,由此假若得以在不开始展览 Python
代码修改的图景下改变规划,那将会方便得多。

代码示意:

2)Python 代码编写和 HTML
设计是两项不相同的干活,大多数正式的网站开发环境都将他们分配给不相同的人士(甚至分裂部门)来形成。
设计者和HTML/CSS的编码人士不应当被须求去编辑Python的代码来完结他们的劳作。

图片 29<ajaxToolkit:CollapsiblePanelExtender runat=”Server”
图片 30TargetControlID=”Panel1″
图片 31CollapsedSize=”0″
图片 32ExpandedSize=”300″
图片 33Collapsed=”True”
图片 34ExpandControlID=”LinkButton1″
图片 35CollapseControlID=”LinkButton1″
图片 36AutoCollapse=”False”
图片 37AutoExpand=”False”
图片 38ScrollContents=”True”
图片 39TextLabelID=”Label1″
图片 40CollapsedText=”Show Details”
图片 41OpenedText=”Hide Details” 
图片 42ImageControlID=”Image1″
图片 43ExpandedImage=”~ollapse.jpg”
图片 44CollapsedImage=”~xpand.jpg”
图片 45ExpandDirection=”Height”/>

3)程序员编写
Python代码和规划人士构建模板两项工作而且拓展的频率是参天的,远胜于让壹个人拭目以俟另一个人形成对有个别既涵盖
Python又包涵 HTML 的文本的编辑工作。

 

依照那个原因,将页面的统一筹划和Python的代码分离开会更干净简单更便于保证。
大家能够运用 Django的 模板系统 (Template
System)来兑现那种格局,这正是本章要切实研究的难题。

图片 46this.Button1.Attributes[“onclick”]=” confirm(‘分明要适可而止下载么?’);”; 

肆 、大家来探视上面这段代码的任何实现情势

不精晓是还是不是自家从不发现这些控件的其他优势。

1)django模板修改的视图函数

7.DragPanel
功效:页面拖动
细节: (1)TargetControlID 要拖动的控件
(2)DragHandleID 拖动的题目栏所在的ControlID

from django.shortcuts import render,HttpResponse

def timeHandle(request):
    import datetime
    t=datetime.datetime.now()

    from django.template import Template, Context
    templateObj=Template("<h1 style='color:red'>current time: {{ time }}</h1>")
    contextObj=Context({"time":str(t)})
    html=templateObj.render(contextObj)

    return HttpResponse(html)

代码示意

2)优化后的写法(推荐)

图片 47<ajaxToolkit:DragPanelExtender runat=”server”
图片 48TargetControlID=”Panel3″
图片 49DragHandleID=”Panel4″ />

from django.shortcuts import render,HttpResponse

def timeHandle(request):
    import datetime
    t=datetime.datetime.now()
    return render(request,"time.html",{"time":str(t)[:19]})

 

template—>time.html:

8.DropDown
功能:什么都得以以下拉菜单的方式弹出来
细节: (1)TargetControlID要在怎么控件上落到实处扩展
(2)DropDownControlID弹出来怎么样

<body>
<h1>current time: {{ time }}</h1>
</body>

代码示意:


图片 50<asp:Panel runat=”server” CssClass=”ContextMenuPanel” Style=”display: none;
图片 51visibility: hidden;”>
图片 52<asp:LinkButton runat=”server” Text=”Option 1″ CssClass=”ContextMenuItem”
图片 53OnClick=”OnSelect” />
图片 54<asp:LinkButton runat=”server” Text=”Option 2″ CssClass=”ContextMenuItem”
图片 55OnClick=”OnSelect” />
图片 56<asp:LinkButton runat=”server” Text=”Option 3 (Click Me!)” CssClass=”ContextMenuItem”
图片 57OnClick=”OnSelect” />
图片 58</asp:Panel>
图片 59<cc1:DropDownExtender runat=”server” TargetControlID=”TextLabel”
图片 60DropDownControlID=”DropPanel” />

 

 

贰 、模版之变量

9.DropShadow
成效:阴影效果,其实能够放给美工实现
细节: (1)Width 单位:px 默认5px
(2)Opacity 不反射率0-1.0 暗许.5

1、语法:

代码示意:

{{ var }}

图片 61<ajaxToolkit:DropShadowExtender runat=”server”
图片 62TargetControlID=”Panel1″ 
图片 63Opacity=”.8″ 
图片 64Rounded=”true”
图片 65TrackPosition=”true” />

② 、深度查询: 通过句点符号 .

 

3、示例:

图片 66[WebMethod]
图片 67string DynamicPopulateMethod(string contextKey)
图片 68图片 69{图片 70}
图片 71Note you can replace “DynamicPopulateMethod” with a naming of your choice, but the return 
图片 72type and parameter name and type must exactly match, including case. 

1)view:

 

def index(request):
    name="hello template"
    i=200
    l=[111,[333,444,555],333]
    d={"name":"yuan","age":23}
    class Person(object):
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def dream(self):
            return "I am dreaming"
    person_bjd=Person("bjd",20)

    #return render(request,"index.html",{"name":name,"i":i,"l":l,"d":d,"person_egon":person_bjd})
    return render(request,"index.html",locals())

代码示意:

locals()能够代表传参,可是必须在html里的模版变量和view里的变量名一致,功耗源,不引进。

图片 73<ajaxToolkit:DynamicPopulateExtender runat=”server”
图片 74TargetControlID=”Panel1″ 
图片 75ClearContentsDuringUpdate=”true” 
图片 76PopulateTriggerControlID=”Label1″ 
图片 77ServiceMethod=”GetHtml” 
图片 78UpdatingCssClass=”dynamicPopulate_Updating” />

2)template

 

<p>{{ name }}</p>
<p>{{ i }}</p>
<p>{{ l.1 }}</p>
<p>{{ d.name }}</p>
<p>{{ person_egon.name }}</p>
<p>{{ person_egon.age }}</p>
<p>{{ person_egon.dream }}</p>

11.FilteredTextBox
成效:文本框数据过滤
细节: (1)过滤条件Numbers LowercaseLetters UppercaseLetters Custom
(2)过滤条件也得以是Custom的重组 FilterType=”Custom, Numbers”
(3)ValidChars=”+-=/*().” Custom要定义那样的管用字符串
(4) 其实那是个鸡肋:你能够输入汉语,聊胜于无,忍了

只顾:句点符只好够用来引用对象的无参数方法

表示代码:


图片 79<ajaxToolkit:FilteredTextBoxExtender runat=”server”
图片 80TargetControlID=”TextBox3″ 
图片 81FilterType=”Custom, Numbers”
图片 82ValidChars=”+-=/*().” />

 

 

③ 、模版之过滤器

12.HoverMenu
作用:鼠标靠近时展现菜单,能够用在在线数据修改的表格上作为职能菜单
细节: (1)PopupControlID要弹出来什么
(2)PopupPostion 在何地弹出来Left (Default), Right, Top, Bottom,
Center.
(3)OffsetX/OffsetY 弹出项与源控件的相距
(4) PopDelay 弹出延时体现 单位milliseconds. Default is 100.

1、语法:

代码示意:

{{obj|filter_name:param}}

图片 83<ajaxToolkit:HoverMenuExtender runat=”Server”
图片 84TargetControlID=”Panel9″
图片 85HoverCssClass=”popupHover”
图片 86PopupControlID=”PopupMenu”
图片 87PopupPosition=”Left”
图片 88OffsetX=”0″
图片 89OffsetY=”0″
图片 90PopDelay=”50″ />

2、default 设置默认

 

若果一个变量是false大概为空,使用给定的暗中同意值。例如:

13.ModalPopupExtender 
这些控件正是,对四个按钮大概Linkbutton等等,举行督察,以完成点击之后,弹出窗口的功用。而弹出的窗口能够团结定义,定义为panel,也许别的的。而panel中的效果能够协调安装,甚至于那么些窗口的操作,操作之后有哪些风浪。在这么些例子中,模仿了Kaixin网中奴隶买卖的事例,进行求证。

{{ value|default:"查询为空" }}

1.TargetControlID不要多说,控制尤其控件。笔者那里是在Gridview中,使用函数触发,而以此特性又无法空。所以,形同虚设了三个按钮。不出示。                      

3、lenght 长度

2.PopupControlID 弹出窗口的ID,小编的事例是四个panel

重临值的长短。它对字符串和列表都起效果。例如:

3.BackgroundCssClassCSS,不用多说。

{{ value|length }}

4.OkControlID不行按钮是肯定

4、filesizeformat 文件大小

5.OnOkScript触及的本子

将值格式化为1个 “人类可读的” 文件尺寸
(例如 '13 KB''4.1 MB''102 bytes', 等等)。例如:

6.DropShadow是还是不是有黑影。

{{ value|filesizeformat }}

7.CancelControlID弹出窗口退出按钮

如果 value 是
123456789,输出将会是 117.7 MB

代码示意:

4、date 时间

图片 91<asp:Panel runat=”server” CssClass=”modalPopup” style=”display:none”>
图片 92<p>
图片 93<asp:Label runat=”server” BackColor=”Blue” ForeColor=”White” Style=””
图片 94Text=”新闻提示”></asp:Label> </p>
图片 95<p >显明要刨除当前下载的天职么?</p>
图片 96<p style=”text-align:center;”>
图片 97<asp:Button runat=”server” Text=”OK” ></asp:Button>
图片 98<asp:Button runat=”server” Text=”Cancel”></asp:Button>
图片 99</p>
图片 100</asp:Panel>
图片 101<ajaxToolkit:ModalPopupExtender runat=”server” TargetControlID=”LinkButton1″ 
图片 102PopupControlID=”Panel2″ BackgroundCssClass=”modalBackground” DropShadow=”true” 
图片 103OkControlID=”Button1″ OnOkScript=”onOk()” CancelControlID=”CancelButton” />

{{ t|date:"Y-m-d" }}

 

5、slice 切分

14.MutuallyExlcusiveCheckBox
功效:互斥复选框就像是Radio一样
细节: (1)Key属性用来分组就如凯雷德diolistGroup一样
(2)argetControlID用来绑定已部分CheckBox

能够将我们需求的有的切分出来

代码示意:

{{ value|slice:"2:-1" }} 

图片 104<ajaxToolkit:MutuallyExclusiveCheckboxExtender runat=”server”
图片 105ID=”MustHaveGuestBedroomCheckBoxEx”
图片 106TargetControlID=”MustHaveGuestBedroomCheckBox” 
图片 107Key=”GuestBedroomCheckBoxes” />

顾前不顾后

  15。NoBot
控件能够为页面中的表单提供类似验证码而却无需任何用户操作的证实,以堵住机器人程序自动提交垃圾音信。

6、truncatechars与**truncatewords 截断**

  1. ResponseMinimumDelaySeconds
    一个理所当然的客户端从初步接受页面到提交表单的时日间隔,单位为秒。在该时间段之内的交付将被认为是机器人钻探所为。
  2. CutoffWindowSeconds:钦赐三个总括同一客户端提交次数的窗口时间段,单位为秒。在该时间段之内的交给次数超过Cutoff马克西姆umInstances所钦点的值将被认为是机器人商量所为。
  3. CutoffMaximumInstances:钦点在窗口时间段内同一客户端最多的付出次数。在CutoffWindowSeconds所钦定的光阴段之内的交由次数超越该值将被认为是机器人斟酌所为。
  4. OnGenerateChallengeAndResponse:钦赐GenerateChallengeAndResponse事件的处理函数。在该事件处理函数中大家可以设定强制浏览器执行的一段JavaScript以及其预期的实行理并了结果。若浏览器的进行理并了结果和预期结果不符,则本次交付将被认为是机器人研讨所为。

遵照内定的字符或单词数量截断。截断的字符串将以可翻译的省略号种类(“…”)结尾。

代码示意:

参数:要截断的字符数或单词数

图片 108<ajaxToolkit:NoBot
图片 109ID=”NoBot2″
图片 110runat=”server”
图片 111OnGenerateChallengeAndResponse=”CustomChallengeResponse”
图片 112ResponseMinimumDelaySeconds=”2″
图片 113CutoffWindowSeconds=”60″
图片 114CutoffMaximumInstances=”5″ />

{{ value|truncatechars:20 }}    <!--按字符截断-->
{{ value|truncatewords:5 }}    <!--按单词截断-->

 

⑦ 、safe 安全部制

16.功能:
    与TextBox控件联合用于充实或调整和收缩TextBox中的Value值。
属性:
      TargetControlID:该控件的目的效果控件。
      Width:该控件加上目的TextBox控件的上升幅度,假使不设定将看不到TextBox控件。
      RefValues:该控件中运用的二个字符串列,用于在TextBox中一日千里递减。
      ServiceUpPath:调用增加值的web方法时的途径。
      ServiceDownPath:调用裁减值的web方法时的门路。
      ServiceUpMethod:调用扩充值的web方法。
      瑟维斯DownMethod:调用减弱值的web方法。
      TargetButtonUpID:自定义的增添值的控件按钮。
      TargetButtonDownID:自定义的削减值的控件按钮。

Django的模板中会对HTML标签和JS等语法标签实行机动转义,原因肯定,那样是为着安全。

代码示意:

只是一些时候我们或然不指望这一个HTML成分被转义,大家能够通过过滤器“|safe”的不二法门告知Django这段代码是安全的不要转义。比如:

图片 115<ajaxToolkit:NumericUpDownExtender runat=”server”
图片 116TargetControlID=”TextBox1″ Width=”120″ RefValues=””
图片 117ServiceDownMethod=”” ServiceUpMethod=”” TargetButtonDownID=”” TargetButtonUpID=”” />
图片 118<ajaxToolkit:NumericUpDownExtender runat=”server”
图片 119TargetControlID=”TextBox2″ Width=”120″ RefValues=”January;February;March;April;May;June;July;August;September;October;November;December”
图片 120ServiceDownMethod=”” ServiceUpMethod=”” TargetButtonDownID=”” TargetButtonUpID=”” />
图片 121<ajaxToolkit:NumericUpDownExtender runat=”server”
图片 122TargetControlID=”TextBox4″ Width=”80″ TargetButtonDownID=”img1″
图片 123TargetButtonUpID=”img2″ RefValues=”” ServiceDownMethod=”” ServiceUpMethod=”” />

value="<a href="">点击</a>"

{{ value|safe}}

 

八 、更加多过滤器

17.PagingBulletedList
功用:扩大BulletedList的分页成效
细节: (1)能够操纵每页最多显示多少条,是还是不是排序
(2)IndexSize表示index headings
的字符数,若是马克斯ItemPerPage设置了概属性被忽略
(3)马克斯ItemPerPage分页每页最大条数

http://python.usyiyi.cn/translate/django_182/ref/templates/builtins.html#ref-templates-builtins-tags

代码示意:


 

 

图片 124<ajaxToolkit:PagingBulletedListExtender BehaviorID=”PagingBulletedListBehavior1″ runat=”server”
图片 125TargetControlID=”BulletedList1″
图片 126ClientSort=”true”
图片 127IndexSize=”1″
图片 128Separator=” – “
图片 129SelectIndexCssClass=”selectIndex”
图片 130UnselectIndexCssClass=”unselectIndex” /> 
图片 131

④ 、模版之标签

18.PasswordStrength
效益:验证密码强度
细节:
StrengthIndicatorType二种彰显格局:文字提示,进程条提示

1、语法

代码示意:

{% tag %}

 

2、for 标签  遍历

图片 132<ajaxToolkit:PasswordStrength runat=”server” DisplayPosition=”RightSide” TargetControlID=”TextBox1″
图片 133StrengthIndicatorType=”Text” PreferredPasswordLength=”10″ PrefixText=”Strength:” 
图片 134HelpStatusLabelID=”TextBox1_HelpLabel” TextCssClass=”TextIndicator_TextBox1″ TextStrengthDescriptions=”Very Poor;Weak;Average;Strong;Excellent”
图片 135MinimumNumericCharacters=”0″ MinimumSymbolCharacters=”0″ RequiresUpperAndLowerCaseCharacters=”false”/>
图片 136<ajaxToolkit:PasswordStrength runat=”server” DisplayPosition=”RightSide” TargetControlID=”TextBox2″
图片 137StrengthIndicatorType=”BarIndicator” PreferredPasswordLength=”15″ HelpStatusLabelID=”TextBox2_HelpLabel”
图片 138BarIndicatorCssClass=”BarIndicator_TextBox2″ BarBorderCssClass=”BarBorder_TextBox2″
图片 139MinimumNumericCharacters=”1″ MinimumSymbolCharacters=”1″ RequiresUpperAndLowerCaseCharacters=”true” />
图片 140<ajaxToolkit:PasswordStrength runat=”server” DisplayPosition=”BelowLeft” TargetControlID=”TextBox3″
图片 141StrengthIndicatorType=”Text” PreferredPasswordLength=”20″ PrefixText=”Meets Policy? ” TextCssClass=”TextIndicator_TextBox3″
图片 142MinimumNumericCharacters=”2″ MinimumSymbolCharacters=”2″ RequiresUpperAndLowerCaseCharacters=”true”
图片 143TextStrengthDescriptions=”Not at all;Very Low compliance;Low Compliance;Average Compliance;Good Compliance;Very High Compliance;Yes”
图片 144HelpHandleCssClass=”TextIndicator_TextBox3_Handle” HelpHandlePosition=”LeftSide” />
图片 145

{% for person in person_list %}
    <p>{{ person.name }}</p>
{% endfor %}    <!--必须有的结束符-->

{% for k,v in d.items %}
     <p>{{ k }},{{ v }}</p>
{% endfor %}


{% for person in personList reversed %}
     <p>{{ forloop.counter }}---{{ person.name }},{{ person.age }}</p>
{% endfor %}

19.PopupControl
作用:任何控件上都得以弹出任何内容
细节: (1)TargetControlID – The ID of the control to attach to
(2)PopupControlID – The ID of the control to display
(3)CommitProperty -属性来标识再次来到的值
(4) CommitScript -把再次回到结果值通过脚本处理,用到CommitProperty

可以利用{% for obj in list reversed %}反向达成循环。

代码示意:

循环序号可以透过{{forloop}}显示::

图片 146<ajaxToolkit:PopupControlExtender runat=”server” TargetControlID=”MessageTextBox” 
图片 147PopupControlID=”Panel2″ CommitProperty=”value” CommitScript=”e.value += ‘ – do not forget!’;” Position=”Bottom” />

forloop.counter    从1开始计数
forloop.counter0    从0开始基数
forloop.revcounter    倒序到1结束
forloop.revcounter0    倒序到0结束
forloop.first    是一个布尔值,如果该迭代是第一次执行,那么它被置为True
forloop.last    是一个布尔值,如果该迭代是最后一次执行,那么它被置为True

 

for 标签包括二个可选的{% empty %} 从句,在付给的组是空的只怕没有被找到时进行

20.Rating
职能:级别控件
细节: 又是二个鸡肋,没有太大实用价值,看代码吧

{% for person in person_list %}
    <p>{{ person.name }}</p>

{% empty %}
    <p>sorry,no person here</p>
{% endfor %}

代码示意:

3、if 标签 分支

图片 148<ajaxToolkit:Rating runat=”server”
图片 149CurrentRating=”2″
图片 150MaxRating=”5″
图片 151StarCssClass=”ratingStar”
图片 152WaitingStarCssClass=”savedRatingStar”
图片 153FilledStarCssClass=”filledRatingStar”
图片 154EmptyStarCssClass=”emptyRatingStar”
图片 155OnChanged=”ThaiRating_Changed” /> 

{% if num > 100 or num < 0 %}
    <p>无效</p>
{% elif num > 80 and num < 100 %}
    <p>优秀</p>
{% else %}
    <p>凑活吧</p>
{% endif %}

 

除此之外格式和别的编制程序语言用法相同不做过多演讲。

21.ReorderList
职能:这一个控件的炫酷程度紧跟于Animation ,能够动态移动多少
细节: (1)绑定数据,拖动数据之后数据将被更新到绑定源
(2)它不是已有控件的扩张是全新的劳务器端控件,只是它对Ajax行为是乖巧的
(3)重排的贯彻有二种艺术:CallBack PostBack
前者的发生在页面上是绝非PostBack的(约等于没有刷新页面)
(4)
而数据增加大概编辑的时候就必供给使用PostBack来一块服务器端的数额状态
(5)PostbackOnReorder正是本着二种政策实行精选
(6)能够扩张的很多,三言两语难以说尽给出基本框架吧,回头再说

4、with 缓存

代码示意:

使用三个回顾地名字缓存1个错综复杂的变量,当您须求利用三个长短不一的变量很频仍的时候是不行实惠的

图片 156<ajaxToolkit:ReorderList runat=”server” 
图片 157DataSourceID=”ObjectDataSource1″
图片 158DragHandleAlignment=”Left” 
图片 159ItemInsertLocation=”Beginning”
图片 160DataKeyField=”ItemID” 
图片 161SortOrderField=”Priority”
图片 162AllowReorder=”true”>
图片 163<ItemTemplate></ItemTemplate>
图片 164<ReorderTemplate></ReorderTemplate>
图片 165<DragHandleTemplate></DragHandleTemplate>
图片 166<InsertItemTemplate></InsertItemTemplate>
图片 167</ajaxToolkit:ReorderList>

{% with total=business.employees.count %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

 

5、csrf_token

22.ResizableControl
成效:就像是安插意况同样能够拖动修改尺寸,可是有哪些实际的意义么,放大字体?没有想到
细节: (1)HandleCssClass – The name of the CSS class to apply to the
resize handle 这一个特性必供给有!

上篇小说我们在终极写了多少个留意,这是不得法的点子,大家所诠释掉的一行是保卫安全机制,那样想及时错过了保障,之所以介绍此措施是应为还不曾接触到模版标签,csrf_token就是用来消除post请求的。(用于跨站请求伪造体贴)

代码示意:

<form action="/login/" method="post">
    {% csrf_token %}
    <p><input type="text" name="user"></p>
    <input type="submit">
</form>

图片 168<ajaxToolkit:ResizableControlExtender runat=”server”
图片 169TargetControlID=”PanelImage”
图片 170HandleCssClass=”handleImage”
图片 171ResizableCssClass=”resizingImage”
图片 172MinimumWidth=”50″
图片 173MinimumHeight=”20″
图片 174MaximumWidth=”260″
图片 175MaximumHeight=”130″
图片 176OnClientResize=”OnClientResizeImage”
图片 177HandleOffsetX=”3″
图片 178HandleOffsetY=”3″ />

探访这么些标签在浏览器中反省的结果

 

图片 179

23.RoundedCorners
效果:控件圆角 纯粹是决定外观的了,曾几何时审美疲劳了还要改,呵呵
细节: (1)还有2个老大丰盛坑人的地点:你不能够不要设置
CssClass=”roundedPanel”要不然不起功能
(2) Radius设置弧度,暗许是5
(3)好象只适用于器皿

它是隐身的,value值相当于带着1个服务器给它的身份证,没有身份证的post请求会被驳回,value值是开辟登录页面是get请求的时候回来的。

代码示意:


图片 180<ajaxToolkit:RoundedCornersExtender runat=”server” TargetControlID=”Panel1″ Radius=”6″ />

 

 

五 、自定义标签和过滤器

24.Slider
效益:完成WinForm中的Slider控件效果
细节:
(1)修改文本框的值也得以影响Slider的景况!那些报告还是有效的!

自定义标签和过滤器进程:

代码示意:

1、在settings中的INSTALLED_APPS配置当前app,不然django不能找到自定义的simple_tag.

图片 181<asp:TextBox runat=”server”></asp:TextBox> 
图片 182<cc1:SliderExtender runat=”server”
图片 183BehaviorID=”Slider2″
图片 184TargetControlID=”Slider2″
图片 185BoundControlID=”TextBox1″
图片 186Orientation=”Horizontal” 
图片 187EnableHandleAnimation=”true”
图片 188Minimum=”0″
图片 189Maximum=”100″/>

 一般暗许已经布署好了一旦没有配备自个儿丰盛

 

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1.apps.App1Config',    #默认已有 如果没有只要添加app名称即可 例如: 'app1'
]

25.TextBoxWatermark
职能:文本水印
细节: 没有啥说的看代码—>

② 、在app中开创templatetags模块(模块名只可以是templatetags)

代码示意:

模块名是原则性的不能够团结起名,因为django会自个儿在此模块找

图片 190<asp:TextBox CssClass=”unwatermarked” Width=”150″ runat=”server”></asp:TextBox>
图片 191<cc1:TextBox沃特ermarkExtender runat=”server” TargetControlID=”TextBox1″ WatermarkText=”请输入用户名” 沃特ermarkCssClass=”watermarked” />

**3、**创制任意 .py
文件,如:my_tags.py**

 

此文件名为自定义

26.UpdatePanelAnimation
功效:更新动画效果
细节:代码结构简单然而要说的东西很多,回头再说写专题吧

from django import template
from django.utils.safestring import mark_safe

register = template.Library()   #register的名字是固定的,不可改变

@register.filter
def multi(x,y):
    return x*y

@register.simple_tag
def multiTag(x,y,z):
    return x*y*z

代码示意:

前三行也是固定的不可改变

图片 192<ajaxToolkit:UpdatePanelAnimationExtender 
图片 193runat=”server” TargetControlID=”up”>
图片 194<Animations>
图片 195<OnUpdating> </OnUpdating>
图片 196<OnUpdated> </OnUpdated>
图片 197</Animations>
图片 198</ajaxToolkit:UpdatePanelAnimationExtender>

假定是自定义过滤器加@register.filter装饰器

 

假使是自定义标签加@register.simple_tag装饰器

27.ToggleButton
意义:正是把一个CheckBox的逻辑应用到三个按钮上,于是就有了双态按钮这么个东西,有点意思啊
闲言少叙,看代码:

肆 、在行使自定义simple_tag和filter的html文件中程导弹入此前创制的
my_tags.py

 

{% load my_tag %}

 

5、使用simple_tag和filter(如何调用)

图片 199<asp:CheckBox Checked=”true” Text=”I like ASP.NET” runat=”server”/>
图片 200<cc1:ToggleButtonExtender runat=”server” TargetControlID=”CheckBox1″ ImageWidth=”19″
图片 201ImageHeight=”19″ UncheckedImageUrl=”Image/down.gif” CheckedImageUrl=”Image/up.gif” CheckedImageAlternateText=”Check” 
图片 202UncheckedImageAlternateText=”UnCheck” />

<!--i=100-->
<p>{{ i|multi:2 }}</p>
<p>{% multiTag i 5 2 %}</p>

<!-- 自定义标签不能用到 if 和 for 标签中 -->
{% if i|multi:5 > 1000 %}
    <p>大于</p>
{% else %}
    <p>小于或等于</p>
{% endif %}

 

⑥ 、相比较过滤器与自定义标签的施用:
过滤器函数的参数只好有八个,自定义标签无参数限制

28.ValidatorCallout
功能:Windows系统中最普遍的气泡提示,比如你磁盘空间不足的时候……
细节: 是对数据证实控件的扩展,比较格外

过滤器能够与逻辑标签共同使用,比如if标签。自定义标签不可能。

代码示意:


图片 203<asp:RequiredFieldValidator runat=”server” ControlToValidate=”NameTextBox” Display=”None” ErrorMessage=”<b>Required Field Missing</b><br />A name is required.” />
图片 204<asp:RequiredFieldValidator runat=”server” ControlToValidate=”PhoneNumberTextBox” Display=”None” ErrorMessage=”<b>Required Field Missing</b><br />A phone number is required.<div style=’margin-top:5px;padding:5px;border:1px solid #e9e9e9;background-color:white;’><b>Other Options:</b><br /><a href=’;quot;not implemented but you get the idea;)");’>Extract from Profile</a></div>” />
图片 205<asp:RegularExpressionValidator runat=”server” ControlToValidate=”PhoneNumberTextBox” Display=”None” ErrorMessage=”<b>Invalid Field</b><br />Please enter a phone number in the format:<br />(###) ###-####” ValidationExpression=”((/(/d{3}/) ?)|(/d{3}-))?/d{3}-/d{4}” />
图片 206<cc1:ValidatorCalloutExtender runat=”Server” TargetControlID=”NReq” HighlightCssClass=”highlight” />
图片 207<cc1:ValidatorCalloutExtender runat=”Server” TargetControlID=”PNReq” HighlightCssClass=”highlight” Width=”350px” />
图片 208<cc1:ValidatorCalloutExtender runat=”Server” TargetControlID=”PNRegEx” HighlightCssClass=”highlight” />

 

⑥ 、模版继承

Django模版引擎中最强劲也是最复杂的有个别正是模版继承了。模版继承能够让你制造一个基本的“骨架”模版,它包蕴您站点中的全体成分,并且能够定义能够被子模版覆盖的 blocks 。

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}My amazing site{% endblock %}</title>
</head>

<body>
    <div id="sidebar">
        {% block sidebar %}
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/blog/">Blog</a></li>
        </ul>
        {% endblock %}
    </div>

    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

{% endblock %}结束标志

其一模版,大家把它叫作 base.html
它定义了1个能够用于两列排版页面包车型客车粗略HTML骨架。“子模版”的干活是用它们的内容填充空的blocks。

在这么些事例中, block 标签定义了八个能够被子模版内容填充的block。 block 告诉模版引擎:
子模版也许会覆盖掉模版中的那几个职分。

{% extends "base.html" %}

{% block title %}My amazing blog{% endblock %}

{% block content %}
{% for entry in blog_entries %}
    <h2>{{ entry.title }}</h2>
    <p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}

extends 标签是那里的显要。它报告模版引擎,那个模版“继承”了另贰个模板。当模版系统处理那个模版时,首先,它将一定母版——在此例中,就是“base.html”。

那时候,模版引擎将注意到 base.html 中的多少个 block 标签,并用子模版中的内容来替换那个block。根据 blog_entries 的值,覆盖后看起来是那般的:

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>My amazing blog</title>
</head>

<body>
    <div id="sidebar">
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/blog/">Blog</a></li>
        </ul>
    </div>

    <div id="content">
        <h2>Entry one</h2>
        <p>This is my first entry.</p>

        <h2>Entry two</h2>
        <p>This is my second entry.</p>
    </div>
</body>
</html>

请留意,子模版并没有定义 sidebar block,所以系统选拔了母版中的值。母版的 {% block %} 标签中的内容总是被用作备选内容(fallback)。

那种办法使代码获得最大程度的复用,并且使得添加内容到共享的情节区域特别简明,例如,部分范围内的领航。

那边是应用持续的一些提示:

1)借使您在模板中应用 {% extends %} 标签,它必须是模版中的第贰个标签。别的的任何动静下,模版继承都将不能够工作。

2)在base模版中设置越来越多的 {% block %} 标签越好。请记住,子模版不必定义全体父模版中的blocks,所以,你能够在大部分blocks中填充合理的暗中认可内容,然后,只定义你需求的那个。多一点钩子总比少一点好。

3)假设您发现你协调在大气的模版中复制内容,那恐怕意味着你应该把内容移动到母版中的二个 {% block %} 中。

4)假如实模版不想平素覆盖母板内容只想做追加,那么在供给追加的始末前增加标签 {{ block.super }}这个标签就代表这母板{% block %}里的备选内容

5)为了更好的可读性,你也能够给你的 {% endblock %} 标签2个 名字 。例如:

{% block content %}
...
{% endblock content %}

在大型模版中,那个点子帮您领会的看出哪一个  {% block %} 标签被关门了。

末尾,请小心你并不可能在三个模板中定义两个一律名字的 block 标签。这几个界定的留存是因为block标签的功能是“双向”的。那么些意思是,block标签不仅提供了二个坑去填,它还在
_父模版_中定义了填坑的情节。借使在2个模板中有三个名字如出一辙的 block 标签,模版的父模版将不知晓使用哪个block的内容。


 

⑦ 、静态文件配置(扩充内容
了然即可)

假定大家的模版需求接纳css文件或然js文件那么那一个文件放哪儿呢?

一 、新建文件夹static

在你的花色里新建文件夹static

二 、改setting配置文件

在文件最终 STATIC_URL = ‘/static/’ 后添加

STATIC_URL = '/static/'    相当于别名
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,"static"),
]

3、使用

以bootstrap-3.3.7文件为例

图片 209

<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图