django的Template模板總結(6)

@作用和目錄位置

  • template一般用於存放html文件
  • template可以是自定義命名的
    在子應用目錄下是需要註冊的
    但在工程目錄下需要在stting.py裏註冊:
    ps:還需要make爲template Folter
# django默認的模板配置
TEMPLATES = [
    {
        ...,
        # 模板路徑
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],

使用template下的html文件時需要在views.py裏對應的方法使用

def where(request):
    students =Students.objects.all()
    datadict={
        'stu':students
    }
    return render(request,'where.html',context=datadict)

@模板語法

  • 讀取數據
#根據關聯查找
def func(request,num):
#獲取對應的班級對象
grade = Grade.object.get(pk = num)
#獲取班級下所有學生的對象列表
stulist = grade.student_set.all()
 #xxx是傳過來字典的鍵名
 {{ xxx.attr}}//通過鍵名調用相關屬性
 {{ ddd.i}}//ddd傳過來的是容器或者集合,通過下標i調用
 {{ xxx.method }}//通過鍵名調用相應方法
 {{ xxx }}//xxx可以是變量,也可以是對象屬性
 {{ xxx.key }}//傳過來的字典裏又有字典
 {% %}//實行代碼或代碼段

@模板內的註釋

1   <!--普通HTML註釋是可見的-->
2   {#  模板註釋是不可見的  #}
3   {% comment %}...{% endcomment %}(也是不可見得)

@模板內的計算

  • 加法和減法
#加法:value是傳過來的值
{{ value|add:10 }}//加10
#減法
{{ value|add:-10 }}//減10

乘除法

#相當於a/b*c,如果要進行2元運算則把第三個設成1 就行了
{% widthratio a b c %}

@大寫轉換

#大寫轉小寫
{{ animal.a_name|lower }}
#小寫轉大寫
{{ animal.a_name|upper }}

@流程控制(遍歷和判斷)

  • 遍歷
#獲取下標
{{ forloop.counter }}//返回的集合下標從1開始
{{ forloop.counter0 }}//返回的集合下標從0開始
{{ forloop.revcounter }}//索引從最大長度到1
{{ forloop.revcounter0 }} //索引從最大長度到0  
  • if 條件
#下面2個,在for循環中使用
{% if forloop.first %},{% if forloop.last %}
例如:
{% if forloop.first %}
...
{% elif forloop.last %}
...
{% else %}
...
{% endif %}
#判斷是否相等
1 {% ifequal value1 value2 %}...{% else %}...{% endifequal %}
2 {% ifnotequal value1 value2 %}...{% else %}...{% endifnotequal %}

@轉義開關
作用:就是views.py傳過來的字典值是一串html代碼,一般正常是按字符串輸出的,如果轉義後就會編譯成html格式在頁面輸出

  • safe方法轉義
{ contents|safe }//添加safe完成轉義
  • 包裹起來轉義
#off是關閉轉義,on是開啓
{% autoescape off %}
  {{ content }}  
{% endautoescape %}

@父輩挖坑子孫填
就是子類繼承父類後可以在父類的模塊內重寫和修改

  • 兼併
{% extends 'base_main.html' %}//繼承另一個模塊
{% include xxx.html %}//兼併另一個模板使之成爲頁面的一部分
{% load static %}//不可省略
#使用block把html代碼分割,extCSS是自定義命名
{% block extCSS %}
    {{ block.super }}//繼承父類block的內容
...
{% endblock %}

@模板渲染過程
使用HttpResponse完成render的功能

  • 1加載模板
template = loader.get_template('Hello.html')//返回<class 'django.template.backends.django.Template'>
  • 2渲染模板
result = template.render()//返回<class 'django.utils.safestring.SafeText'> 
renturn HttpResponse(result)// 完成
result = template.render(context={"haha":"你哈什麼哈"})//渲染時給模板傳遞數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章