1. MVCフレームワークとMTVのフレームワーク
1. MVCフレームワーク
MVC:
M -- models 数据库相关
V -- views 视图相关(逻辑)
C -- controller url控制器(url分发器,路由分发)
2. MTVの枠組み
django -- MTV
M -- models 数据库相关
T -- templates HTML相关 html就是模板
V -- views 视图(逻辑业务相关)
+ controller url控制器(url分发器,路由分发)
2.文法
テンプレートのレンダリング公式文書
レンダリングするテンプレートについて、あなたは2つのだけ特殊記号(構文)を覚えておく必要があります。
{{}}と{%}%
{{}}、{%%に関連するロジック}に関連付けられた変数。
3.変数
1.全能ポイントコール
{{}}変数名
変数名は、英数字とアンダースコアで構成されています。
ドット(。)オブジェクトの取得した属性に対応する、テンプレート言語で特別な意味を持っています。
イラスト
views.py
from django.shortcuts import render
import datetime
def index(request):
name = "水手"
num = 100
lst = [1, 2, "aa", "bb"]
dic = {"xx": "oo", "xxx": "ooo"}
date = datetime.date(1993, 5, 2) # 日期对象
class Person():
n = "黑哥"
def p(self):
return "床前明月光"
obj = Person()
return render(request, "index.html", {"name": name, "num": num, "lst": lst, "dic": dic,"date":date, "obj": obj})
# print(locals()) 获得全局字典,传的数据多,效率低
# return render(request, "index.html", locals())
index.htmlをコード
<h1>24期官网</h1>
<h2>{{ name }}</h2> # 获得后端name的值渲染到页面
<h2>{{ num }}</h2> # 获得后端num的值渲染到页面
<h2>{{ lst }}</h2> # 获得后端lst的值渲染到页面
<h2>{{ dic }}</h2> # 获得后端dic的值渲染到页面
<h2>{{ obj }}</h2> # 获得后端obj的对象渲染到页面
<h2>{{ lst.1 }}</h2> # {#点索引获取对应的值#}
<h2>{{ dic.xx }}</h2> # {#点键获取字典的值#}
<h2>{{ obj.n }}</h2> # {#点属性获取值#}
<h2>{{ obj.p }}</h2> # {#点方法获取返回值,前端调用不加括号#}
<h2>{{ dic.keys }}</h2> {#先查找字典中的键,有此键就不调用方法了#}
<h2>{{ dic.items }}</h2> # {#点方法获取字典的键值对#}
# {# dic.values获取值,dic.keys获取键 #}
2.注文照会
辞書引き(辞書引き)
プロパティやメソッドクエリ(属性やメソッドのルックアップ)
デジタルインデックスクエリ(数値索引参照)
イラスト
dic = {"xx": "oo", "xxx": "ooo","keys":"我在执行我"}
<h2>{{ dic.items }}</h2> # 前端执行时先在字典中查询此键,有键就不执行字典的方法了
# 结果是: 我在执行我 而不是: dict_keys(['xx', 'xxx']) 键的列表
3. 注意点
- メソッドを呼び出し、パスのパラメータをサポートしていません。
- 変数が存在しない場合、システムはデフォルトの設定は「」(空文字列)である値string_if_invalidテンプレートオプションを、挿入されます
4.フィルタのフィルタ
1.文法
{{値| FILTER_NAME}}
{{値| FILTER_NAME:パラメータ}}
2.具体的な例
1.デフォルトのデフォルト
注:「:」スペースはありませんスペースを一切残っていないにスペースはありません、何も引用符を必要としません
<h2>{{ age|default:"Nothing" }}</h2> # 变量不存在,显示为空字符串,设置默认值
返回同样是nothing的还有有这个变量,但是值是False,空字典等值为空的
注意:string_if_invalid:オプション追加できるオプションをテンプレート「が見つかり」を、デフォルトの役割を置き換えることができます
见上述做修改部分替代default的作用
在settings文件中TEMPLATES的'OPTIONS'字典中再添加一个键值对 "string_if_invalid":"不存在或为空" 为空时或不存在时执行
2. filesizeformat
「人間が読める」フォーマットサイズ(例えば'13 KB「」4.1メガバイト「」102バイト、等)としてフォーマットバリュー
{{ value|filesizeformat }} #如果 value 是 123456789,输出将会是 117.7 MB
3.アドオンを追加
<h2>{{ num|add:22 }}</h2> # html语法加不加引号效果相同
<h2>{{ num|add:"22" }}</h2> # html语法加不加引号效果相同 num=100 结果:122
<h2>{{ lst|add:lst }}</h2> #
<h2>{{ name|add:"bsb" }}</h2> # 也可以用于字符串和列表等的相加
4.長さが長
<h2>{{ name|length }}</h2> # 字符长度
<h2>{{ lst|length }}</h2> # 列表长度
<h2>{{ dic|length }}</h2> # 字典长度
<h2>{{ name|add:"bsb"|length }}</h2> # 多重操作
5.スライススライスしました
<h2>{{ name|add:"abcdefg"|slice:"2:-1:2" }}</h2> # ace 支持切片和步长
まず最初の値をとります
<h2>{{ name|first }}</h2> # 获取第一个值
<h2>{{ value|last }}</h2> # 获取最后一个值
7.スプライシングに参加
<h2>{{ name|join:"//" }}</h2> # 结果 水//手 相当于字符串拼接
<h2>{{ dic|join:"//" }}</h2> # 键拼接 xx//xxx
<h2>{{ lst|join:"//" }}</h2> # 迭代拼接 1//2//aa//bb
8. truncatechars
文字の文字列が指定した文字数を超えている場合、それは切り捨てられます。切り捨てられた文字列が最後に(「...」)、配列省略記号を変換されます
<h2>{{ "abcdefghigk"|truncatechars:3 }}</h2> # ... 保留几个字符,小于三也是三个点
<h2>{{ "abcdefghigk"|truncatechars:6 }}</h2> # abc... 保留6个,有三个点
9日の日付フォーマット
date = datetime.date(1993, 5, 2) # 日期对象
now = datetime.datetime.now() # 现在时间
<h2>{{ date|date:"Y-m-d"}}</h2> #
<h2>{{ now|date:"Y-m-d H:i:s"}}</h2> # 设置显示格式
フィルタなしでの拡張は、提供される設定を変更します
# USE_L10N = True
USE_L10N = False
DATETIME_FORMAT = "Y-m-d H:i:s"
DATE_FORMAT = "Y-m-d"
TIME_FORMAT = "H:i:s"
<h2>{{ date }}</h2> #
<h2>{{ now }}</h2> # 设置显示格式
10.安全
bd = '<a href="http://www.baidu.com">百度</a>' # 后端
前端:
<h2>{{ bd }}</h2> # 显示字符串 <a href="http://www.baidu.com">百度</a>
<h2>{{ bd|safe }}</h2> # 设置safe,显示为a标签 百度
11. truncatewords
msg = "我 是 i love you my baby"
<h3>{{ msg|truncatewords:2 }}</h3> # {# 以空格区分截断,不是字符字节 #} 我 是 ...
<h3>{{ msg|truncatechars:2 }}</h3> # 注意二者的区分 ...
5.カスタムフィルタ
1.カスタムフィルタ
1.アプリで(templatetags名前を変更することはできません)templatetagsというパッケージを作成します。
2.パッケージにPYファイルを作成します(ファイル名はmy_tags.pyをカスタマイズすることができます)
3.ライト・コードmy_tags.pyで:
from django import template
register = template.Library() # register名字不能错,固定
4.デコレータ+追加の機能を書きます
@register.filter
def xx(v1,v2):
ret = v1+v2
return ret.upper()
5.
index.htmlを中
{% load my_tags %} # 加载py文件
{{ "alex"|xx:"dsb" }} # alex和dsb 分别对应两个参数,渲染返回值
# 参数至多两个,至少一个 name = "alex"可以通过index函数传递
6.その他の言葉遣い
from django import template
register = template.Library()
@register.filter
def xx(v1,v2="dsb"):
ret = v1 + v2
return ret.upper()
{% load my_tags %}
{{ "alex"|xx }} # 后端添加默认参数 ALEXDSB
一つだけのパラメータ
from django import template
register = template.Library()
@register.filter
def xx(v1):
ret = v1
return ret.upper()
{% load my_tags %}
{{ "alex"|xx }} # 后端添加默认参数 ALEX
関数のエイリアス
from django import template
register = template.Library()
@register.filter(name="xxsb")
def xx(v1,v2):
ret = v1 + v2
return ret.upper()
{% load my_tags %}
{{ "alex"|xxsb:"dsb" }} # 注意用别名 ALEXDSB
1.カスタムタグやフィルタ
1 在应用app01下创建一个叫做templatetags的包(名称不能改),在里面创建一个py文件,例如xxoo.py
2 在xxoo.py文件中引用django提供的template类,写法
from django import template
#register名称不可变,library大写
register = template.Library()
#定义过滤器
@register.filter # 参数至多两个
def xx(v1,v2):
return v1+v2
使用:
{% load xxoo %} # 加载上文件名xxoo,相当于引入xxoo.py文件
{{ name|xx:'oo' }} # xx是函数名 传两个参数
# 自定义标签 没有参数个数限制
@register.simple_tag
def huxtag(n1,n2): #冯强xx '牛欢喜'
'''
:param n1: 变量的值 管道前面的
:param n2: 传的参数 管道后面的,如果不需要传参,就不要添加这个参数
:return:
'''
return n1+n2
# inclusion_tag 返回html片段的标签
@register.inclusion_tag('result.html')
def res(n1): #n1 : ['aa','bb','cc']
return {'li':n1 }
使用:
{% res a %}
1.カスタムタグやフィルタ前提
1 在应用下创建一个叫做templatetags的文件夹(名称不能改),在里面创建一个py文件,例如xxxx.py
2 在xx.py文件中引用django提供的template类,写法
from django import template
#register名称不可变,library大写
register = template.Library()
2.フィルタを定義します
1. 页面请求 127.0.0.1/new/
2. 找到 url(r'^test/', views.test) 执行 new函数
3. new有第三个参数,{"name":"Alex"}传到new.html文件中
4. {{ name|addoo:"dsb"}}加载xx.py文件,调用xx中的addoo函数
5. 执行xx中的res函数 return n1+n2,参数一一对应
6.替换new.html中内容,响应浏览器,显示结果
3.カスタムラベル
1. 页面请求 127.0.0.1/new/
2. 找到 url(r'^new/', views.new) 执行 new函数
3. new有第三个参数,{"name":"Alex"}传到new.html文件中
4. {% load xx %}加载xx.py文件,调用{% res name "dsb" %}函数
5. 执行xx中的res函数 return n1+n2,参数一一对应
6.替换new.html中内容,响应浏览器,显示结果
4. inclusion_tag返品ラベルフラグメントHTML
1. 页面请求 127.0.0.1/new/
2. 找到 url(r'^new/', views.new) 执行 new函数
3. new有第三个参数,{"a":a}传到new.html文件中
4. {% load xx %}加载xx.py文件,调用{% res a "s2" %}函数
5. 执行xx中的res函数
6. 将return值返回给@register.inclusion_tag("result.html")的result.html
7. 修饰后依次跳回new.html文件,响应浏览器,显示结果
4.静的な設定ファイル
1 项目目录下创建一个文件夹,例如名为jingtaiwenjianjia,将所有静态文件放到这个文件夹中
2 settings配置文件中进行下面的配置
# 静态文件相关配置
STATIC_URL = '/abc/' #静态文件路径别名
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'jingtaiwenjianjia'),
]
3 引入<link rel="stylesheet" href="/abc/css/index.css">
4.写引入文件的小窍门
用别名时,写路径过程中没有提示,可以先写真正的名字,有提示,当所有路径写全后,再改为别名