First, what is a template?
As long as there is not a html template syntax in a html file inside, this file is called a template.
Second, the template syntax classification
First, the syntax of template variables: {{}} The syntax is:
Key traversing complex data structures in Django templates is the dot character. (Ie points)
views.py
def index(request): name = "hello haiyan" i = 200 l = [11,22,33,44,55] d = {"name":"haiyan","age":20} class People(object): #继承元类 def __init__(self,name,age): self.name = name self.age = age def __str__(self): return self.name+str(self.age) def dream(self): return "你有梦想吗?" #实例化 person_egon = People("egon",10) person_dada = People("dada",34) person_susan = People("susan",34) person_list = [person_dada,person_egon,person_susan] return render(request,"index.html" , { " Name " : name, " I " : I, " L " : L, " D " : D, # key corresponding to the template name corresponding to the value is the above-defined variable. " Person_egon " : person_egon , " person_dada " : person_dada, " person_list " : person_list, } ) # return render(request,"index.html " , locals ()) .. # with locals () can not render a written above but with locals (), views inside what name with what you have inside the template name with # locals () local: with the locals had equivalent according to the above as
template/index.html
<h4> variable {{z}}: Depth query </ H4> <HR> <H3> {{name}} </ H3> <P> {{I}} </ P> <P> {{L} } </ P> <P> {} {D} </ P> <P> {{L. 0 }} ------ "may be a single value taken by the symbol period (i.e. point) </ p> <P> {{L. . 4 }} </ P> <P> d.name {{}} </ P> <P> {} {} d.age ----- "The dictionary may break period value, a point to get. However, the front page is not see your template syntax when you click on an element of the review , you will find that secretly change over the </ the p-> <the p-> person_dada.name {{}} </ the p- > <P> person_egon.age {{}} </ P> <P> person_dada.dream {{}} </ P> <-!. method, when attention is currently no method of dream parameters -> <P> {{person_list. 2 }} </ P> <! <-! That how to make it object becomes a string? In which the index view function plus a built-in method __str__ -> <--__ str__ string is subject to change -!>
Note: The method of symbol period (no parametric method) may be used to reference the object.
<h4>字典:{{ dic.name.upper }}<
/
h4>
Second, the label template syntax: syntax {% tag%}:
Tag looks like this: {% tag %}
. Tag is more complex than a variable: some additional information creating in the output text, a number or to control flow through the logic loop, some variables will be used to load subsequent to the template.
Some tags require the start and end tags (e.g., {% tag %} ...
tag content ... {% endtag%}).
1, for the label (Note: cycle number {} {forloop} can be displayed through)
<h3> cycle value. 1 </ H3> <HR> { % for Item in person_list% } <P> item.name, for {{}}, {{}} item.age </ P> { % endfor% } < h3> cycle value 2: descending </ h3> <HR> { % for Item in person_list the reversed% } <- start sequence number from 1 ->! <P> {} {} forloop.counter ----- > item.name, for {{}}, {{}} item.age </ P> <-! numbers start with 0 -> <p> {{forloop.counter0 }} -----> {{item .name}}, {{item.age} } </ p> <-! descending number -> <p> {{forloop.revcounter }} -----> {{item.name}}, { item.age}} {</ P> { % endfor% } <H3>Value cycle 3: Dictionary </ H3> <HR> { % for k,v in d.items %} <p>{{ k }},{{ v}}</p> {% endfor %}
2, .... for empty: for label with an optional {% empty %} clause set forth in order to empty or is not found, the operation may be.
{% for person in person_list %} <p>{{ person.name }}</p> {% empty %} <p>sorry,no person here</p> {% endfor %}
3、if标签 :{% if %}会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
% IF I {> 300%} <P> {I}} is greater than {</ P> {%}% elif 200 is I == <P> is equal to {I}} {</ P> {%}% the else <P > less than {I}} {</ P> {%} endif%
4, with: Use a simple name cache a complex variable , when you need to use an "expensive" method (such as database access) many times when it is very useful
{% with total=business.employees.count %} {{ total }} employee{{ total|pluralize }} {% endwith %}
<p>{{ person_list.2.name }}</p> {% with name=person_list.2.name %} <p>{{ name }}</p> {% endwith %}
5, csrf_token: the label for protection CSRF
When submitting data security mechanisms will do when you click on the submit a forbbiddon will be wrong, it is to use the setting in the configuration of security mechanisms scrf do, then we can now give it a ,,, comments or form form add a {% csrf_token%} Here ,,, this is the real solution, not a solution of the comment
<h3>scrf_token</h3><form action="/tag/" method="post"> {% csrf_token %} <p><input type="text" name="haiyan"></p> <input type="submit"> </form>
Third, the filter template syntax: syntax {{obj | filter__name: param}}
1、default:
If a variable is false or empty, the default values given. Otherwise, use the value of the variable. E.g:
<P> default filter: {{li | default: "If the content is empty explanatory, display settings"}} </ p>
2, length: returns the length value. It works both strings and lists. E.g:
{{ value|length }}
If the value is [ 'a', 'b', 'c', 'd'], the output is 4.
3、filesizeformat:
Value formatted as a "human readable" file size (e.g. '13 KB'
, '4.1 MB'
, '102 bytes'
, etc.). E.g:
{{ value|filesizeformat }}
If value
is 123456789, the output will be 117.7 MB
.
4、date:如果 value=datetime.datetime.now()
{{ value|date:"Y-m-d" }}
5, slice: Slice
If the value = "hello world"
{{ value|slice:"2:-1" }}
6, truncatechars cut
If the string of characters is more than a specified number of characters, it will be truncated. Translatable strings will be truncated sequence at the end of the ellipsis ( "...").
Parameters: the number of characters to be truncated
E.g:
<p> Truncated characters: {{Content | truncatechars: 20 is}} </ P> <p> Truncated words: {{content | truncatewords: 4 }} </ p>
If the content is "I am is haiyan, how are you asd df dfgfdgdg?
Output: Truncated character: I am is haiyan, ho ...
Output: Truncated words: I am is haiyan, how ...
7、safe
JS and HTML tags will be syntactic tags Django template automatically escapes, for obvious reasons, this is for safety. But sometimes we might not want these HTML elements are escaped, for example, we do a content management system, add background of the article is modified, these modifications may be raised by a similar FCKeditor editing the HTML modifier text, escaped, then automatically displayed if the source file is to protect HTML tags. To turn off the automatic Django escaped HTML in two ways, if it is a single variable we can filter | tell Django "safe" way to secure this code is not necessary to escape. such as:
value="<a href="">点击</a>" {{ value|safe}}
<p> {{label}} </ p> <-! tag to the security system will become string -> <P> {{label | safe}}! </ P> <- plus safe , make sure your data is safe in order to be treated as a tag ->
Here are some simple common filter templates, more detailed
Fourth, custom tags and filters
1, INSTALLED_APPS in the current configuration settings in the app, django otherwise unable to find simple_tag custom.
2. Create templatetags module app in (name of the module can only be templatetags )
3, in templatetags which create any .py file,
Such as: my_tags.py
Template Django Import from from django.utils.safestring Import mark_safe Register = () is the name #register template.Library is fixed, unchangeable
@ register.filter filter
DEF Multi (X, Y):
return X * Y
@ register.simple_tag tag
DEF Multitag (X, Y, Z):
return X * Y * Z
@register.simple_tag 标签
def my_input(id,arg):
result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
return mark_safe(result)
4, before using import custom filter simple_tag and html files created my_tags.py
{% load my_tags %}
5, using simple_tag and filter (how to call)
Filter: {{var | filter_name:}} # parameters only two parameters, a parameter is a variable var, a parameter that is behind parameters
tags: {% simple_tag Parameter 1 Parameter 2 ...%}
. ------------------------------- HTML {%}% Load XXX # 12 is NUM = {{NUM | Multi: 2 24-#}} {{num | Multi: "[22,333,4444]"}} is equivalent to copy, and it [22,333,4444] multiplied by the num times
{% Multitag 2 5 6%} parameters are not limited, but can not be placed if for statements {% simple_tag_multi num 5%}
Customizable parameters only two filter functions, can be logically Analyzing custom label without parameter limits, the logic can not be determined
% { IF I | Multi: . 5 > 1000 %}! <- Analyzing * I . 5 > 1000 -> <P> {I}} is greater than {</ P> { % the else % } <P> {{greater than or equal }} I </ P> { %} endif%