Django - 템 플 릿 요약

9441 단어 Pythondjangopython
템 플 릿 언어
템 플 릿 언어 는 무엇 입 니까?
html+      

Template 와 Context
터미널: python manage. py 셸 django 환경 진입
>>> from django.template import Context,Template
>>> t = Template('My name is {
    {name}}')
>>> c= Context({'name':'kkk'})
>>> t.render(c)
'My name is kkk'

요컨대 {{변수}} html 에 포 함 된 변 수 는 백 엔 드 에서 직접 가 져 올 수 있 습 니 다.
깊이 변수의 찾기 - > 만능 마침표.
             。
#   ,           ,  :

>>> from django.template import Template, Context
>>> t = Template('Item 2 is {
    { items.2 }}.')
>>> c = Context({'items': ['apples', 'bananas', 'carrots']})
>>> t.render(c)
'Item 2 is carrots.'

#            Python   。              ,       :
>>> from django.template import Template, Context
>>> person = {'name': 'Sally', 'age': '43'}
>>> t = Template('{
    { person.name }} is {
    { person.age }} years old.')
>>> c = Context({'person': person})
>>> t.render(c)
'Sally is 43 years old.'

#  ,               。    , Python   datetime.date    
#year 、 month   day     ,                    :

>>> from django.template import Template, Context
>>> import datetime
>>> d = datetime.date(1993, 5, 2)
>>> d.year
1993
>>> d.month
5
>>> d.day
2
>>> t = Template('The month is {
    { date.month }} and the year is {
    { date.year }}.')
>>> c = Context({'date': d})
>>> t.render(c)
'The month is 5 and the year is 1993.'

#               ,            (dots)       ,     
#        。
>>> from django.template import Template, Context
>>> class Person(object):
...     def __init__(self, first_name, last_name):
...         self.first_name, self.last_name = first_name, last_name
>>> t = Template('Hello, {
    { person.first_name }} {
    { person.last_name }}.')
>>> c = Context({'person': Person('John', 'Smith')})
>>> t.render(c)
'Hello, John Smith.'

#                。   ,   Python       upper()   isdigit()
#   ,                     :
>>> from django.template import Template, Context
>>> t = Template('{
    { var }} -- {
    { var.upper }} -- {
    { var.isdigit }}')
>>> t.render(Context({'var': 'hello'}))
'hello -- HELLO -- False'
>>> t.render(Context({'var': '123'}))
'123 -- 123 -- True'

#           *   *                    ;          
#   。

if
if true 나 false 의 값 만 판단 할 수 있 고 복잡 한 판단 을 할 수 없습니다.
{% if 1 %}

{% elif False %}

{% endif %}

for
{% for i in obj%}
    #           
{% endfor %}

    li=[1,2,3]
    {% for foo in li %}
        {
    { forloop.counter }}
    {% endfor %}
    
{% for foo in li %} { { forloop.counter0 }} {% endfor %}
{% for foo in li %} { { forloop.revcounter }} {% endfor %} ----------------------------------------------- 1 2 3 0 1 2 3 2 1

filter & simple_tag
필터 필터
str='helloWord'
{
    { str | upper }}   

{ { str | lower }}
{ { str | first | upper }}
{ { str | capfirst }} ----------------------------------------- HELLOWORD helloword H HelloWord

add: 변수 에 해당 하 는 값 을 추가 합 니 다.
addslashes: 변수 에 따옴표 앞 에 사선 을 추가 합 니 다.
이니셜 대문자
cut: 문자열 에서 지정 한 문 자 를 제거 합 니 다.
date: 날짜 문자열 포맷
defoult: 값 이 False 라면 기본 값 으로 바 꿉 니 다. 그렇지 않 으 면 원래 값 으로 바 꿉 니 다.
add=5
{
    {obj|add:5}}

value2='hel l o wor ld'
{
    {value2|cut:' '}}

value3=datetime.datetime.now()
{
    {value3|date:'y-m-d'}}

value=[]
{
    { value|default:'  ' }}
-----------------------------------
11
hellowrod
2017-10-18
  

s1 = "OK"
{% autoescape off %}
    {
    { s1 }}
{% endautoescape %}
         

{
    {s1|safe}}
    

사용자 정의 filter
  • app 아래 에 디 렉 터 리 를 만 듭 니 다. (templatetags)
  • 폴 더 아래 임의의 이름 py 파일 aaa. py from django import template from django. utils. safestring import marksafe register = template.Library() @register.filter def add_nub(a1, a2): return a1 + a2
  • settings 파일 에 app 등록
  • html 참조 상단 에 {% load py 파일 이름%}
  • 을 추가 합 니 다.
  • 사용 {{인자 1 | 함수 명: 인자 2}} demo. html {% load aa%} 제목 {{'asd' | add str: 'zxc'}
  • 사용자 정의 simpletag
  • app 아래 에 디 렉 터 리 를 만 듭 니 다. (templatetags)
  • 폴 더 아래 임의의 이름 py 파일 aaa. py from django import template from django. utils. safestring import marksafe register = template.Library() @register.simple_tag def add_nub(a1, a2): return a1 + a2
  • settings 파일 에 app 등록
  • html 참조 상단 에 {% load py 파일 이름%}
  • 을 추가 합 니 다.
  • {% 함수 명 매개 변수 1 매개 변수 2...%} demo. html {% load aaa%} 제목 {% add nub 1 2%}
  • filter 와 simpletag 의 비교:
  • filter 매개 변 수 는 최대 2 개 만 있 을 수 있 고 매개 변 수 는 명확 한 요구 가 있 습 니 다 {{{매개 변수 1 | add str: 매개 변수 2}} 빈 칸 을 추가 하면 안 됩 니 다 (filter 여러 매개 변 수 를 추가 하려 면 목록 을 전달 한 다음 내부 에서 처리 할 수 있 습 니 다)
  • simple_tag 매개 변 수 는 무수 개
  • filter 는 if 판단 의 조건 으로 직접 할 수 있다
  • simple_tag 는 if 에 끼 워 넣 으 면 안 됩 니 다
  • filter 와 if 문장 이 템 플 릿 언어 에서 의 응용
    filter_demo.html
    {% load my_tag %}
    
    
    
    
        
        Title
    
    
        
    {% csrf_token %}
    {% if n1 and n2 %} {% if n1|add_num:n2 > 100 %}

    { { n1 }}+{ { n2 }} = { { n1|add_num:n2 }} 100

    {% elif n1|add_num:n2 == 100 %}

    { { n1 }}+{ { n2 }} = { { n1|add_num:n2 }} 100

    {% else%}

    { { n1 }}+{ { n2 }} = { { n1|add_num:n2 }} 100

    {% endif %} {% endif %}

    my_tag.py
    from django import template
    
    
    register = template.Library()
    
    @register.filter
    def add_num(nub1, nub2):
        return int(nub1) + int(nub2)
    

    view
    def filter_demo(request):
        if request.method == 'POST':
            n1 = request.POST.get('n1',None)
            n2 = request.POST.get('n2',None)
            print(n1,n2)
            return render(request, 'filter_demo.html', locals())
        elif request.method == 'GET':
            return render(request, 'filter_demo.html')
    

    템 플 릿 계승
    base.html
    
    
    
        
        Title
        
    
    
        
    {% block content %} What Happtend {% endblock %}

    ordered.html

    {% extends 'base.html' %}
    
    
    {% block content %}
        {
        { block.super }}
        
    {% endblock %}

    shopping_car.html
    {% extends 'base.html'%}
    
    {% block content %}
               
    {% endblock %}
    

    칠판 을 두드리다
  • 템 플 릿 에 {% extends%} 을 사용 하면 템 플 릿 의 첫 번 째 템 플 릿 으로 표시 해 야 합 니 다.그렇지 않 으 면 템 플 릿 계승 은 소 용이 없다.
  • 일반적으로 기본 템 플 릿 의 {% block%} 태그 가 많 을 수록 좋 습 니 다.글자 템 플 릿 은 반드시 부모 템 플 릿 의 모든 코드 블록 을 필요 로 하지 않 는 다 는 것 을 기억 하 십시오. 따라서 일부 코드 블록 을 합 리 적 으로 부족 하 게 채 운 다음 에 하위 템 플 릿 에 필요 한 코드 블록 만 정의 할 수 있 습 니 다.갈고리 가 많 을 수록 좋다 는 속담
  • 여러 템 플 릿 사이 에서 코드 를 복사 하 는 것 을 발견 하면 이 코드 세그먼트 를 부모 템 플 릿 의 {% block%} 에 배치 하 는 것 을 고려 해 야 합 니 다.
  • 부모 템 플 릿 의 블록 내용 에 접근 하려 면 {{block. 슈퍼} 이 탭 을 사용 하 십시오. 이 템 플 릿 변 수 는 부모 템 플 릿 의 내용 을 나 타 냅 니 다.모든 리 셋 이 아 닌 상위 코드 블록 에 내용 을 추가 하려 면 이 변 수 는 매우 유용 합 니 다.
  • 같은 템 플 릿 에서 같은 이름 의 {% block%} 을 여러 개 정의 할 수 없습니다. 이러한 제한 이 존재 하 는 것 은 block 태그 의 작업 방식 이 양 방향 이기 때 문 입 니 다.즉, block 라벨 은 채 울 구 덩이 를 팠 을 뿐만 아니 라 부모 템 플 릿 에 이 구덩이 가 채 워 진 내용 도 정의 했다.템 플 릿 에 같은 이름 의 {% block%} 태그 가 두 개 있 으 면 부모 템 플 릿 은 어떤 블록 을 사용 할 지 알 수 없습니다
  • 좋은 웹페이지 즐겨찾기