模板繼承and自定義模板標簽和過濾器
自定義模板標簽和 過濾器:
因為模板標簽和過濾器只給我們提供了 這麽多 無法對我們的使用造成更多的便利 ,剩下的就需要我們自己去創建新的 模板標簽和過濾器了
1、在settings中的INSTALLED_APPS配置當前app,不然django無法找到自定義的simple_tag.
2、在app中創建templatetags模塊(模塊名只能是templatetags)
3、創建任意 .py 文件,如:my_tags.py
首先你需要在你的app中創建新的一個規定好的文件夾這個文件夾的名字是規定好的:templatetags
然後在這個文件夾內創建你的py文件
from django importtemplate from django.utils.safestring import mark_safe #這個模塊是進行跳轉的時候的必須的模塊 register = template.Library() #創建這個對象 @register.filter # 用這個裝飾器 來裝飾我們的函數 def multi_filter(x,y): return x*y @register.filter def link_tag(href): return mark_safe(‘<a href = %s>click</a>‘%href)
下面通過urls分發視圖找到views內的對應的templace內的自定義標簽 隨之 執行
{% load my_filter_tag %} {#這一步是找到你的創建的自定的規則#} <p>{{ num|multi_filter:2 }}</p> {#在你的規定中你的multi_filter是求出兩個數的乘數的#}
<p>{{ ‘http://www.baidu.com‘|link_tag }}</p> {#找到你的規定內的link_tag這個函數是定義一個按鈕進行跳轉的#}
模板繼承 (extend):
1、創建一個base.html文件,
2、把要顯示的頁面的內容寫在這裏面,也就是html要在瀏覽器顯示的內容
3、在right裏面寫個盒子
{% block classinfo %}
{% endblock %}
在這裏面寫個空盒子,以後誰來擴展就在這個盒子裏面添加相應的內容就行了
4、然後再創建一個.html文件,讓這個繼承base.html文件,
{% extends "base.html" %} #必須是在文件的第一行
在基板裏面添加內容
{% block classinfo %}
<h2>首頁</h2>
<h2>學生信息</h2>
<h3>{{ class_id }}班</h3>
{% endblock%}
5、也可以寫好多盒子,
在left中寫個盒子
{% block menu %}
<p>I see you you</p>
{% endblock %}
模板繼承是當你的templace內的html文件有多余的重復內容之後難道你要每一個都去重復的寫嗎?不 這個時候就用到了繼承了
就好比你去瀏覽一個網頁有很多網頁是 當你瀏覽這個網頁的時候你再點擊這個網頁內的其他的內容 那麽可能你的頂部或者左邊的某一部分還是不變的 那麽這就用到了模板的繼承(後面的使用很多的)
include 繼承
{% include ‘advertise.html‘ %}
上面是繼承了advertise.html內的所有的內容 {#include是直接把所有的內容給復制過來這個不太好沒有規定#}
這個模版,我們把它叫作 base.html
, 它定義了一個可以用於兩列排版頁面的簡單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 %}
可修改的模板:
{% block title %} {#這個是定義一個可以修改的塊 這個塊被繼承後可以修改#} <title>Title</title> {% endblock title %} {#結束這個 可以繼承的塊#} 這個是設置這個模板的title標簽的內容可以被繼承的時候修改
{{block.super}}
修改的同時把父模板的內容拿下來
這個是你再修改這個模板的同時把你的父親模板的內容也給拿下來使用
{% extends ‘base.html‘ %} {% block content %} <div class="article_list"> <ul> {% for article in article_list %} <li>{{ article }}</li> {% endfor %} </ul> </div> {% endblock content %} {% block title %} <title>Article</title> {% endblock %} 此次步驟是繼承你的base.html內的content塊 然後再把base內的這個塊的內容給拿過來顯示
模板繼承and自定義模板標簽和過濾器