開會遲到,程式碼不規範,晚上八點半去健身!新入行程式設計師被瘋狂吐槽!
阿新 • • 發佈:2021-08-11
今日內容概要
- django settings原始碼
- 模板語法傳值
- 模板語法之過濾器
- 模板語法之標籤
- 自定義過濾器、標籤、inclusion_tag
- 模板的繼承
- 模板的匯入
- 模型層(單表查詢關鍵字)
今日內容詳細
django settings原始碼
""" 1.django其實有兩個配置檔案 一個是暴露給使用者可以自定義的配置檔案 專案根目錄下的settings.py 一個是專案預設的配置檔案 當用戶不做任何配置的時候自動載入預設配置 2.配置檔案變數名必須是大寫 """ 疑問:為什麼當用戶配置了就使用使用者配置的 不配置就是要預設的 from django.conf import settings settings = LazySettings() os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day05.settings") ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE" class LazySettings(LazyObject): def _setup(self, name=None): # os.environ看成是一個全域性大字典 'day05.settings' settings_module = os.environ.get(ENVIRONMENT_VARIABLE) self._wrapped = Settings(settings_module) # Settings('day05.settings') class Settings(object): def __init__(self, settings_module): # 'day05.settings' for setting in dir(global_settings): # 獲取全域性配置檔案裡面所有的變數名 if setting.isupper(): # 校驗是否是純大寫 setattr(self, setting, getattr(global_settings, setting)) # 給Settings物件新增全域性配置檔案中所有的配置資訊 self.SETTINGS_MODULE = settings_module # 'day05.settings' mod = importlib.import_module(self.SETTINGS_MODULE) # from day05 import settings # 匯入暴露給使用者的自定義配置檔案 for setting in dir(mod): if setting.isupper(): setting_value = getattr(mod, setting) setattr(self, setting, setting_value)
模板語法之傳值
# 傳值方式1:利用字典挨個傳值 return render(request,'index.html',{'i':i,'f':f,'s':s}) # 傳值方式2:簡單粗暴 locals()將當前名稱空間中所有的變數名全部傳遞給頁面 return render(request,'index.html',locals()) """ 傳值方式1 傳值精確 不會造成資源浪費 傳值方式2 傳值粗糙 可能會造成一定的資源浪費 ps:為了教學方便 我們以後就是用locals() """ 補充:傳遞函式名和類名都會自動加括號呼叫(模板語法不支援額外的傳參)
模板語法之獲取值
'''django模板語法取值只能採用 句點符(.) '''
索引 鍵都可以無限制的點點點
<p>{{ d.hobby.3.username }}</p>
模板語法之過濾器
# 類似於python的內建方法 <p>過濾器:將豎杆左側的資料當做第一個引數</p> <p>統計長度:{{ s|length }}</p> <p>加法運算:{{ i|add:100000000000 }}</p> <p>字串拼接:{{ s|add:'heiheihei' }}</p> <p>日期格式:{{ ctime|date:'Y年-m月-d日' }}</p> <p>預設值:{{ b|default:'哈哈' }}</p> <p>預設值:{{ b1|default:'哈哈' }}</p> <p>檔案大小:{{ file_size|filesizeformat }}</p> <p>擷取文字(三個點也算):{{ s|truncatechars:6 }}</p> <p>擷取文字(三個點不算)空格:{{ s|truncatewords:3 }}</p> <p>{{ h|safe }}</p> <p>{{ sss }}</p> <p>{{ sss1 }}</p> 轉義 前端 |safe 後端 from django.utils.safestring import mark_safe sss1 = mark_safe('<h2>老子要掙大錢</h2>') ps:前端程式碼也可以在後端寫好傳入!!!
模板語法之標籤
# 類似於python的流程控制
{% for foo in s %}
{% if forloop.first %}
<p>這是我的第一次~~</p>
{% elif forloop.last %}
<p>這是最後一次了啊~</p>
{% else %}
<p>{{ foo }}</p>
{% endif %}
{% empty %}
<p>傳入的資料是空的</p>
{% endfor %}
"""
{{}} 變數相關
{%%} 邏輯相關
"""
# 瞭解
{% with d.hobby.3.username as name %}
{{ name }}
{{ d.hobby.3.username }}
{% endwith %}
自定義過濾器、標籤、inclusion_tag
# 類似於python裡面的自定義函式
1.在應用下建立一個名字必須叫"templatetags"資料夾
2.在上述資料夾內建立一個任意名稱的py檔案
3.在該py檔案內固定先書寫以下兩句話
from django import template
register = template.Library()
# 自定義過濾器
@register.filter(name='myfilter')
def index(a,b):
# 簡單的加法運算
return a + b
# 自定義標籤
@register.simple_tag(name='mysimple')
def func1(a,b,c,d):
return '%s-%s|%s?%s'%(a,b,c,d)
# 自定義inclusion_tag
@register.inclusion_tag('login.html',name='my_inclusion_tag')
def func2(n):
l = []
for i in range(1,n+1):
l.append('第%s頁'%i)
return locals()
前端
{% load mytag %}
{{ i|myfilter:666 }}
{% mysimple 1 'jason' 222 'egon' %}
{% my_inclusion_tag 10 %}
{% my_inclusion_tag 8 %}
inclusion_tag
當某個區域需要反覆使用並且資料不是固定的
模板的匯入
# 類似於後端到模組 想要什麼區域性頁面直接匯入即可
{% include 'myform.html' %}
模板的繼承
先使用block劃定區域
母版
{% block 區域名稱 %}
{% endblock %}
子版
{% extends 'home.html' %}
{% block 區域名稱 %}
{% endblock %}
母版在劃定區域的時候一般都應該有三個區域
css區域
html文件區域
js區域
ps:目的是為了讓子版具有獨立的css js等 增加擴充套件性
{% block css %}
{% endblock %}
{% block content %}
{% endblock %}
{% block js %}
{% endblock %}
ps:子版也可以繼續使用母版劃定區域內的內容
{{ block.super }}