첫째, 일반적인 구문
장고는 두 개의 특수 기호를 기억해야 템플릿 :
{{}}과 {%} %
{}는 {} 값이 템플릿을 렌더링 할 때,이 {} % % 논리적 관계의 작동을 나타내는 대체 변수를 나타낸다.
변수
구문 : 변수 이름}} {{
변수 이름은 영숫자와 밑줄로 구성되어 있습니다.
도트 (.) 객체의 인수 속성에 해당하는 템플릿 언어의 특별한 의미를 가지고 있습니다.
몇 가지 예 :
뷰 코드 :
def template_test(request):
l = [11, 22, 33]
d = {"name": "孙悟空"}
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def dream(self):
return "{} is dream...".format(self.name)
sun = Person(name="孙悟空", age=34)
zhu = Person(name="猪八戒", age=90)
sha = Person(name="沙和尚", age=18)
person_list = [sun, zhu, sha]
return render(request, "template_test.html", {"l": l, "d": d, "person_list": person_list})
템플릿 지원 표현 :
{# 取l中的第一个参数 #}
{{ l.0 }}
{# 取字典中key的值 #}
{{ d.name }}
{# 取对象的name属性 #}
{{ person_list.0.name }}
{# .操作只能调用不带参数的方法 #}
{{ person_list.0.dream }}
참고 : 시스템 템플릿을 발견하면 조회 할 수있는 다음과 같은 순서에있을 것입니다 (.) :
- 사전에 쿼리
- 속성 또는 메서드
- 인덱스 번호 (아니, 즉 뒷면에서 찾을 수 없음은 부정적이다)
두, Filters-- 필터
필터의 번역, 수정 변수의 결과를 표시한다.
구문 : {{값 | FILTER_NAME : 매개 변수}} ''더 공간이 남아 있지
태만
{{ value|default:"nothing"}}
값이 전달되지 않은 경우, 값은 아무것도 표시되지 않습니다
참고 : '찾기'(기본값보다 높은 우선 순위)의 기본 동작을 대체 할 수 string_if_invalid : 옵션은 옵션을 추가 할 수있는 템플릿.
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',
],
'string_if_invalid': '找不到'
},
},
]
filesizeformat
는 "사람이 읽을 수있는"파일 크기 (예를 들어, '13 KB ','4.1 MB ','102 바이트 '등)로 포맷 된 값입니다. 예를 들면 :
{{ value|filesizeformat }}
값이 123456789 인 경우, 출력은 117.7 MB 될 것입니다.
더하다
또한 대해 +에 대응하는 변수 패러미터에 첨가하고, 접합 디지털 문자열 결합리스트
{{ value|add:"2" }}
(4) 디지털 값이고, 출력은 6이다.
{{ first|add:second }}
상기 제 [1, .2,3] 인 경우, 두 번째는 [4,5,6]이고, 그 결과는 출력 [1,2,3,4,5,6]이다.
상부 하부 与
소문자
{{ value|lower }}
자본
{{ value|upper}}
표제
표제
{{ value|title }}
밝은 rjust 중앙
좌회전
"{{ value|ljust:"10" }}"
오른쪽 정렬
"{{ value|rjust:"10" }}"
센터
"{{ value|center:"15" }}"
길이
{{값 | 길이}}
길이 값, 예컨대 값 = 'A', 'B', 'C', 'D']로하고, (4)는 표시를 리턴한다.
일부분
슬라이스 및 Python 방법과 동일한 방법을 사용하여 슬라이스는 스텝 크기를 제공 할 수있다
{{value|slice:"2:-1"}}
첫째, 마지막
첫 번째 요소를 가지고
{{ value|first }}
마지막 요소를 가지고
{{ value|last }}
어울리다
문자열 연결 목록을 사용하여. 파이썬 (목록)로 str.join.
{{ value|join:" // " }}
truncatechars, truncatewords
문자의 문자열이 지정된 문자 수를 초과하는 경우, 그것은 잘립니다. 번역 문자열을 생략의 끝에서 순서를 잘립니다 ( "...").
参数:截断的字符数
{{ value|truncatechars:9}}
参数:截断的单词数(空格区分)
{{ value|truncatewords:9}}
날짜
날짜 형식
{{ value|date:"Y-m-d H:i:s"}}
구성의 설정은 기본 형식을 변경 :
USE_L10N = False
DATETIME_FORMAT = 'Y-m-d H:i:s'
출력 형식의 문자 : 보려면 클릭하세요 .
안전한
JS와 HTML 태그 분명한 이유 장고 템플릿이 자동으로 이스케이프 구문 태그 것, 이것은 안전을위한 것입니다. 그러나 때때로 우리는 이러한 수정은 HTML 수정을 편집 비슷한 FCKEDITOR에 의해 발생 될 수 있습니다 수정, 이러한 HTML 요소, 예를 들어, 우리는 콘텐츠 관리 시스템을, 이스케이프 원하는 문서의 배경을 추가 할 수 있습니다 텍스트, 소스 파일이 HTML 태그를 보호하는 경우 자동으로 표시 탈출했다. 우리가 필터링 할 수 있습니다 하나의 변수 인 경우, 자동 장고는 두 가지 방법으로 HTML을 탈출 해제하려면 |이 코드를 확보하기 위해 장고 "안전한"방법을 이야기하는 것은 벗어날 필요가 없습니다.
예를 들면 :
value = "<a href='#'>点我</a>"
{{ value|safe}}
평 파일 (안전 사용의 필요성에 HTML) 금고에 제공됩니다 :
from django.utils.safestring import mark_safe
'a':mark_safe('<a href="http://www.baidu.com">百度</a>')
{{ a }}
셋째, 사용자 정의 필터
하나 또는 두 개의 매개 변수 파이썬 기능을 사용자 정의 필터 :
- (입력)의 값은 - - 반드시 문자열이 아닌
- 매개 변수의 값 - 기본값을, 또는 완전히 생략 할 수 있습니다,
예를 들어, 필터에 {{var에 | foo는 "바 "}} , 필터 푸 변수 통과 VAR 및 매개 변수 "바" .
사용자 정의 필터 코드 파일의 위치 :
app01/
__init__.py
models.py
templatetags/ # 在app01下面新建一个package package
__init__.py
app01_filters.py # 建一个存放自定义filter的py文件
views.py
사용자 정의 필터를 작성 :
from django import template
register = template.Library()
@register.filter
def fill(value, arg):
return value.replace(" ", arg)
@register.filter(name="addSB") # 起了个别名
def add_sb(value):
return "{} SB".format(value)
사용자 정의 필터를 사용 :
{# 先导入我们自定义filter那个文件 #}
{% load app01_filters %}
{# 使用我们自定义的filter #}
{{ somevariable|fill:"__" }}
{{ d.name|addSB }}
두, 태그의 태그
...에 대한
<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>
루프 매개 변수에 대한 사용할 수 있습니다 :
변하기 쉬운 | 기술 |
---|---|
forloop.counter |
전류 루프 인덱스 값 (1부터) |
forloop.counter0 |
전류 루프 인덱스 값 (제로) |
forloop.revcounter |
역방향 전류 루프 인덱스 (단 1) |
forloop.revcounter0 |
(단, 0) 현재의 인덱스 값을 순환 역방향 |
forloop.first |
현재 사이클의 첫 번째 사이클 아니다 (부울 값) |
forloop.last |
현재주기 마지막 사이클하지 않습니다 (부울 값) |
forloop.parentloop |
외부 루프 사이클이 층 |
용 빈
<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% empty %}
<li>空空如也</li> //for循环取不出数据时显示
{% endfor %}
</ul>
... ELIF 다른 和 경우
{% if user_list %}
用户人数:{{ user_list|length }}
{% elif black_list %}
黑名单数:{{ black_list|length }}
{% else %}
没有用户
{% endif %}
다른 경우라면
{% if user_list|length > 5 %}
七座豪华SUV
{% else %}
黄包车
{% endif %}
문 지지체는 경우 와 , 또는 , == , > , < , ! =, <= , > =, 에 , 하지에 , IS , 아니다 판단
와
중간 변수의 정의
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
//或
{% with business.employees.count as total %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
csrf_token
이 태그는 CSRF 보호를 사용한다.
페이지의 형태로 형태로 된 기록 {% csrf_token %}
주의
{# ... #}
주의 사항
- 장고 템플릿 언어는 다음과 같은 문구를 지원하지 않는 지속적인 판단을 지원하지 않습니다
{% if a > b > c %} // 使用a > b and b > c
...
{% endif %}
- 장고 템플릿 언어의 우선 순위 속성은 방법보다 더 크다
def xx(request):
d = {"a": 1, "b": 2, "c": 3, "items": "100"}
return render(request, "xx.html", {"data": d})
페이지를 렌더링하기 위해이 방법을 렌더링 사용하는 경우 위와 같이, 사전 D 키 항목을 통과하고 기본 d.items () 메소드, 템플릿 언어에있는이 시간이있다 :
{{ data.items }}
기본 항목 키는 D를 취할 것입니다.
셋째, 마더 보드
첫째, 마더 보드를 추출
- HTML 페이지는 여러 페이지의 공용 부분을 추출
- 여러 블록 블록은 하위 페이지 범위를 입력 할 필요가 정의
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
{% block page-css %} //母板的CSS样式位置
{% endblock %}
</head>
<body>
<h1>这是母板的标题</h1>
{% block page-main %}
{% endblock %}
<h1>母板底部内容</h1>
{% block page-js %}
{% endblock %}
</body>
</html>
주 : 일반적으로, 블록 및 서브 - 페이지 교체를 용이하게하기 위해 마더 보드의 CSS JS 블록에 특별한 페이지를 정의한다.
둘째, 마더 보드를 상속
하위 페이지 마더 상속 페이지 상단 다음 구문을 사용.
{% extends 'layouts.html' %} // 带上引号 不带的话会当做变量
// 重写block块 ,写在block内部
셋째, 블록 (블록)
마스터를 이용하여 {% block xxx %}
정의하는 방법 "블록."
하위 페이지에 마더 보드에 대응하는 블록 이름의 내용을 정의하는 마더 보드를 교체 대응한다.
{% block page-main %}
<p>一</p>
<p>二</p>
<p>三</p>
{% endblock %}
넷째, 구성 요소
종래 내비게이션 페이지 콘텐츠로서 꼬리말 정보 요소는 별도의 파일에 저장 될 수 있고, 그리고 필요한 곳에 사용될 수있는 다음과 같은 구문에 도입.
{% include 'navbar.html' %}
다섯째, 정적 파일 관련
{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
JS 파일을 참조 할 때 사용합니다 :
{% load static %}
<script src="{% static "mytest.js" %}"></script>
파일에 사용 된 대부분의 변수로 저장할 수 있습니다 :
{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}"></img>
get_static_prefix 사용
{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />
또는
{% load static %}
{% get_static_prefix as STATIC_PREFIX %}
<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />
여섯 사용자 정의 simpletag
사용자 정의 필터 등,보다 유연한 매개 변수를 수신 할 수있다
등록 정의 simpletag입니다 :
@register.simple_tag
def plus(a, b, c):
return "{} + {} + {}".format(a, b, c)
사용자 정의 간단한 태그를 사용합니다 :
{% load app01_demo %}
{# simple tag #}
{% plus "1" "2" "abc" %}
七, inclusion_tag
HTML 코드는 동적 반환 단편 사용
예 :
// templatetags/my_inclusion.py
from django import template
register = template.Library()
@register.inclusion_tag('result.html')
def show_results(n):
n = 1 if n < 1 else int(n)
data = ["第{}项".format(i) for i in range(1, n+1)]
return {"data": data}
템플릿 / result.html :
<ul>
{% for choice in data %}
<li>{{ choice }}</li>
{% endfor %}
</ul>
템플릿 / index.html을 :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>inclusion_tag test</title>
</head>
<body>
{% load my_inclusion %}
{% show_results 10 %}
</body>
</html>