ジャンゴ:MTV--テンプレート声明

1.Djangoフレームワークが導入します

1.1MVCフレーム(モデルビューコントローラ)

モデル(モデル)、ビュー(ビュー)とコントローラ(コントローラ)、低い結合を有する、再利用:フルネームはモデルビューコントローラ、ソフトウェアエンジニアリング、ソフトウェア・アーキテクチャ・モデルで、ソフトウェアは、3つの基本的な部分に分割されます高、低ライフサイクルコスト。

  • M:モデルモデル

  • V:ビュービュー-html

  • C:コントローラの送信コントローラルーティング命令ビジネスロジック---

最上层 是视图层(veiw)面向用户,它提供用户操作界面

中间一层 是控制层(Controller),负责根据用户从视图层输入指令,选取"数据层"中的数据,然后对其进行相应的操作,得到结果

最底层 数据层(Models)程序操作的数据或信息

这三层紧密联系,但互相独立,每一层内部变化不影响其它层,每一层都有对外提供接口,供上面一层调用。

1.2Django MTV(モデルテンプレートビュー)

M:モデルモデルのORM:オブジェクトは、ビジネス・オブジェクトとデータベースのための責任があります

T:テンプレートテンプレート-html:ページがユーザーに表示さどのように責任

V:ビューのビジネス・ロジック:ビジネス・ロジックの担当とモデルとテンプレートに呼び出すための適切な時間

また:ジャンゴが、販売代理店をURLの異なるビューに対処するために苦労したURLのページ要求を担当し、ビューと適切なモデルテンプレートを呼び出します

1.3string_if_invalid設定

  • ファイルのsettings.pyに示すように設定

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            "string_if_invalid":"变量不存在",
        },
    },
]
  • アプリケーション:唯一の目的をデバッグするための!存在しない変数に直面したとき、テンプレート管理サイトを含む多くのテンプレートには、デフォルトのテンプレートシステムに依存しています。あなたが設定した場合string_if_invalid、変数が存在しない場合、あなたが設定した値が表示されます。代わりに''defaultデフォルト値ではなく、無効な文字列よりも、表示するためのフィルタを提供します。

  • HTML表示

2.Django一般的なコマンド

2.0注:

{#这是注释#}
  • Djangoテンプレートの特殊記号

    {{ }}  表示变量,在模版替换成值
    
    {% %}  表示逻辑相关的操作
    

2.1変数

  • フォーマット:変数名} {} {
  • 変数名は、英数字とアンダースコアで構成され
  • ドット(。)テンプレート言語で意味を特別なを持って、あなたは、対応するプロパティの値を取得することができます
#views.py
from django.shortcuts import render
from app01 import model
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def talk(self):
        return "咱也不知道,咱也不敢问!"

    def __str__(self):
        return "Person obj:{}-{}".format(self.name,self.age)

def test(request):
    lst = [11,22,33]
    dic = {"name":"xjk","age":22}
    obj = Person("曹操",55)


    return render(request,"test.html",{"lst":lst,"dic":dic,"obj":obj})
#test.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>{{ lst.0 }}</p>
    <p>{{ dic.name }}</p>
    <p>{{ obj.name }}</p>
    <p>{{ obj.talk }}</p>
</body>
</html>
#结果
11  #列表索引0的数
xjk #获取字典name键的值
曹操 #获取对象的name值
咱也不知道,咱也不敢问!  #对象talk的方法
  • 注:(。)システムは、テンプレートに遭遇すると、次の順序でのクエリに行きます。
    • 辞書にクエリ
    • プロパティまたはメソッド
    • デジタルインデックス

2.2フィルタフィルタ

  • 検索結果には、変数を変更します
  • 構文:{{値| FILTER_NAME:パラメータ}} 注意「:」はスペースの左側はありません
1つのデフォルト
  • 値はショーに、値を渡さない場合は、「何もありません。」
{{ value|default:"什么都没有" }}
2 filesizeformat
  • 人間が読み取り可能なファイルサイズとしてフォーマットされた値(例えば「13キロバイト」、「4.1メガバイト」、等「102bytes」)
{{ 234344|filesizeformat }}

3アドオン
  • 変数パラメータに追加
如果变量时数字?
当value = "125" 为字符串
{{value|add:"2"}}
输出结果:127

当vlaue = 125 为数字
{{value|add:"2"}}
输出结果:127

{{list1|add:list2}}
当list1 与list2是列表,那么输出当list1和list2相加,一个新的列表,
  • 数へのパラメータとして文字の文字列は、蓄積しない場合は、2つのパラメータを渡す追加またはスプライシング
4下
  • 下ケース
{{ value|lower }}
5アッパー
  • 首都
{{ value|upper}}
6タイトル
  • 見出し
{{ value|title }}
7明るいです
"{{ value|ljust:"10" }}"
8 RJUST
  • 右揃え
"{{ value|rjust:"10" }}"
9センター
  • センター
"{{ value|center:"15" }}"
10の長さ
  • 長さは、文字列にすることができ、それはリストであり
{{value|length}}
11スライス
  • スライス
{{ value|slice:"2:-1"}}
{{ value|slice:"-2:1:-1"}}
最初の12
  • 最初の要素を取ります
{{ value|first }}
13最後
  • 最後の要素を取ります
{{ value|last }}
図14は、参加します
  • str.joinでのpythonで文字列の連結リストを使用する(リスト)
{{ value|join:" // " }}



15 truncatechars
  • 文字の文字列が指定した文字数を超えている場合、それは切り捨てられます。翻訳可能な文字列が省略記号の末尾に列を切り捨てられます(「...」)。
views.py
value = "hello python"

test.html
{{ value|truncatechars:5 }}

显示结果:he...
#表示如果字符串长度超过5个长度,就只显示5个。
显示5个字符里,包括了三个点。
16 truncatewords
  • 英語の単語が文字以上の文字の指定した数よりも場合、それは切り捨てられます。翻訳可能な文字列が省略記号の末尾に列を切り捨てられます(「...」)。
views.py
value = "hello my name is Lilei what's yor name"

test.html
{{ value|truncatewords:5 }}

显示结果:hello my name is Lilei ...
17安全
  • JSとHTMLタグがDjangoのテンプレートが自動的にエスケープ構文のタグになります、明白な理由のために、これは安全のためです。しかし、時には我々はこれらのHTML要素は、これらの変更は、編集と同様のFCKeditorので上昇させることができる変更された記事の背景を追加し、例えば、我々はコンテンツ管理システムの操作を行い、エスケープされたくない場合がありますHTML修飾子テキストは、ソースファイルはHTMLタグを保護することであるならば、自動的に表示され、脱出しました。それは私たちがフィルタリングすることができ、単一の変数である場合は自動Djangoは、二つの方法でHTMLをエスケープオフにするには|このコードを確保するための「安全な」方法は、エスケープする必要はありませんDjangoに伝えます。
{{value|safe}}
  • 例:views.py
{#views.py#}
def test(request):
     value = '<a href="https://www.baidu.com/">百度</a>'
      return render(request,"test.html",{"value":value}


{#test.html#}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>{{ value }}</div>
    <div>{{ value|safe }}</div>
</body>
</html>
  • 以下の結果を入力します。
18日付
  • 日付形式
  • 表示するには、
{#views.py#}
import datetime
now = datetime.datetime.now()

{#test.html#}
<div>{{ now|date:"Y-m-d H:i:s" }}</div>
  • ディスプレイ

有用な時間の複数の複数を書き込む場合は{{今|日付:「はYmd H:I:S」}}、意志コードの冗長性は、構成ファイル内容setting.pyにより、長くなります

USE_L10N = False
DATETIME_FORMAT="Y-m-d H:i:s"
DATETIME_FORMAT = "Y年m月d日 H时i分s秒"
  • この場合、ビューは、{{}}今直接呼び出してもよいです

2.3カスタムフィルタ

アプリ(必須)にtemplatetagsというパッケージを作成します。1.

2. PythonでPYファイル、カスタムファイル名、の.pyの要件を作成します。

3. PYファイルを書きます:

from django import template
register = template.Library()   #register也不能变

4.書き込み機能デコレータ+

@register.filter
def add_xx(value,arg):
    return "{}-{}".format(value,arg)

カスタム関数を使用し5.html

{% load py文件%}}
{{ "mjj"|add_xx:"haha"}}

:カスタムフィルタ、あなたは@ register.filter(is_safe =真)保護を設定することができますので、


問題解決:

  • カスタム関数の名前を変更したい場合は呼び出すときに、当然のことながら、また社名変更

おすすめ

転載: www.cnblogs.com/xujunkai/p/11846954.html