[] Djangoテンプレートシステム--2019-08-17午前六時33分36秒

オリジナル:http://blog.gqylpy.com/gqy/261

「@
公式ドキュメント二つの特別な記号:{} {} == == == {%と%} == {論理的に関連%%}を使用して、{} {}に関連付けられた変数。



変数

Djangoのテンプレート言語で使用される構文をクリックしてください:{{変数名}}

テンプレートエンジンが変数と出会う**場合は、この変数を計算して、結果を自分自身に置き換えられます。
名前付き変数は任意の英数字とアンダースコア(_)の組み合わせが含まれる。
変数名にスペースまたは句読点を含めることはできません。* *

(。)ポイントは、テンプレートシステムがポイントに遭遇したとき、それは次の順序を照会、テンプレート言語で特別な意味を持っています:

  1. フィールドクエリ(辞書引き)
  2. プロパティまたはメソッドクエリ(属性やメソッド参照)
  3. デジタルインデックスクエリ(数値索引参照)

注意事項:

  1. ==計算結果の値が呼び出し可能であれば、結果はテンプレートの値になります呼び出し、引数なしで呼び出されます。==
  2. ==変数が存在しない場合は、テンプレートシステムが値string_if_invalidオプションを挿入します、このオプションのデフォルト値は空の文字列です。==

簡単な例:

from django.shortcuts import HttpResponse, render, redirect


def template_test(request):
    lst = ['a', 'b', 'c', 'd']

    dct = {
        'name': 'zyk',
        'sex': 'boy',
        'hobby': ['Python', 'Django', 'MySQL']
    }

    class Person(object):
        def __init__(self, name, sex):
            self.name = name
            self.sex = sex

        def blogging(self):
            return '%s is blogging.' % self.name

    zyk = Person('zyk', 'boy')
    xhh = Person('xhh', 'girl')
    xmm = Person('xmm', 'girl')
    person_list = [zyk, xhh, xmm]

    return render(
        request,
        'template_test.html',
        {
            'lst': lst,
            'dct': dct,
            'person_list': person_list
        }
    )

テンプレートを書くことができます。

0の値をとるLST度:
== == {{}}#1 A lst.0
DCTの名前の値を取る:
== {{}} ==#Zyk dct.name
趣味DCTがリストに取り込まインデックス値の1:
== {{}} ==#ジャンゴdct.hobby.1
インデックスオブジェクト2名person_list取ら:
== {{}} ==#person_list.2.nameのXMMの
person_listでコールオブジェクトインデックス0ブログの方法
== {{}} ==#Zykのperson_list.0.bloggingはブログです。

第二に、フィルタのフィルタ

使用してDjangoテンプレート言語でフィルターを変数の表示を変更します。

構文: == {{変数|ろ過法:パラメータ}} ==
前記パイプ文字(|)は、フィルタを適用するために使用され、コロン(:)フィルタのパラメータを指定するためのものです。

注意事項:

  1. フィルタ、すなわち、フィルタ出力は、別のフィルタへの入力として使用することができ、「鎖」オペレーションをサポートします。
  2. {{値| truncatewords:30}}のフィルタは、例えば、パラメータを受け入れることができ、ディスプレイは、最初の30ワードの値を示しています。
  3. Filterパラメータは、それがこのような使用のスプライス要素のリストとして引用符、カンマとスペースでラップする必要があり、スペースが含まれています:{{リスト|加入:「」}}。
  4. ==パイプ記号(|)。==両側にスペースなし
    ***

    1.デフォルト

    デフォルト値は、変数を指定。
    構文: ==値を|デフォルト:「デフォルト」==

変数がfalseまたはnullの場合、デフォルト値が与えられます。それ以外の場合は、変数の値を使用します。

注:
settings.pyファイルにテンプレート内のOPTIONS内には(デフォルトよりも優先順位が高い)のデフォルト値を指定するオプションを追加することができます
'string_if_invalid': "默认值",
***

2.長さ

戻り値の文字列の長さの値とリストに作用する。
構文: ==値|長さ==
***

3. filesizeformat

「人間が読める」のファイルサイズとしてフォーマット値。
構文: ==値| filesizeformat ==
***

4.スライス

スライス
構文 ==値|スライス: "2:-1" ==
***

5.追加

。すべての数字、さらに場合、指定された値の最終値に追加
構文: ==値|追加:「値を追加」==
***

6.最初、最後

最後の要素を取って、最初の要素を取る。
サイクルが最初か最後の値かどうかを判断するために使用することができた場合。
***

7.参加

文字列の連結リストを使う。
構文: ==値を|参加: "string"は==
***

8. truncatechars

文字の文字列が指定した文字数を超えている場合、それは切り捨てられます。末端の配列切り捨てられた文字列は(」... 『)翻訳される省略記号(注:』 ...「3つの文字です)。
構文: ==値| truncatechars:9 ==
***

9. truncatewords

単語の特定の番号の後の文字列を切り捨てます。
構文: ==値| truncatewords ==

10日付

日付形式
構文: ==値| DATE: 'HはYmd:I:S' ==

文字は、出力をフォーマットすることができます
***

11.安全

JSとHTMLのタグは構文的なタグも自動的に安全のために、明白な理由のために、Djangoテンプレートをエスケープします。

しかし、時には我々はこれらのHTML要素がエスケープされたくない場合があり、例えば、我々はコンテンツ管理システムの操作を行い、記事の背景が変更された追加、これらの変更は、HTML修飾子を編集する同様のFCKeditorので上昇させることができますテキストは、ソースファイルはHTMLタグを保護することであるならば、自動的に表示され、脱出しました。

安全な逃避である必要はありませんDjangoのコードを伝えるために|(安全な値)の方法を、それは我々がフィルターを通過することができます単一の変数である場合は自動Djangoは、二つの方法でHTMLをエスケープオフにします。

たとえば、次のようにvalue = "<a href='#'></a>"
***

12.カット

すべて同じ指定した文字列を削除します。
構文: ==値|カット:「スペース」==
***

13.下部、上部、タイトル、として、ljust、RJUST、中心

すべて小文字、すべて大文字、タイトル、左詰め、右詰め、センタリング:続い
***

14.カスタムフィルタ

1つまたは2つのパラメータのPythonの機能を持つカスタムフィルタ:

  • 変数(入力)の値:文字列は、必ずしもではありません
  • パラメータの値:そこにデフォルト値であること、または完全に省略可能

例えば、フィルタに{{VAR | FUNC「VAR」}}、フィルタ変数VARのFUNCパラメータと「バー」を通過します。

:カスタムフィルタコードファイルの保存場所
と呼ばれる新しいアプリで== templatetagsのパッケージ、その後、下記==パッケージにカスタムフィルタファイルを作成します。

次のように書かれたカスタムフィルタファイル:

from django import template
register = template.Library()

@register.filter(name='addSB')
def add_sb(value):
    return '%s is SB' % value

カスタムフィルタを呼び出します:

{# 先导入自定义的filter文件 #}
{% load 文件名 %}

{# 使用自定义的filter #}
{{value|addSB }}

15.タグ

にとって
<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% endfor %}
</ul>

一部のパラメータは、循環のために利用可能である:
|変数|説明|
| - | - |
| forloop.cunter |(1から始まる)現在のインデックス値サイクル|
| forloop.cunter0 |ループ現在のインデックス値(ゼロ) |
| forloop.revcounter |(1から始まる)現在のインデックス値サイクルを逆|
| forloop.revcounter0 |(0から始まる)現在のインデックス値サイクルを逆|
| forloop.first |現在のサイクルは、最初のサイクル(ブール値ではありません値)|
| |現在のサイクルが最後のサイクル(ブール値)ではありません| forloop.last
外側のループのこの層周期は| | | forloop.parentloop

以下のために...空
<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% empty %}
    <li>空空如也</li>
{% endfor %}
</ul>
もし...他
{% if user_list|length > 5 %}
  七座豪华SUV
{% else %}
    黄包车
{% endif %}
...のelif ...他にあれば
{% if user_list %}
  用户人数:{{ user_list|length }}
{% elif black_list %}
  黑名单数:{{ black_list|length }}
{% else %}
  没有用户
{% endif %}

==文がサポートしている場合:および、または、==、> 、<、=、<= ,!> =、に、いないで、されていないされて判断==。
==けど!==:Djangoテンプレート言語は以下の文言をサポートしていない継続的な判断をサポートしていません。

{% if a > b > c %}
...
{% endif %}
とともに

中間変数の定義

{% with value as v %}
    {{ v }}
{% endwith %}

16. csrf_token

クロスサイトリクエストフォージェリの保護のために。
フォームがフォームを送信している場合は、formタグの内側に記述する必要があります。
== csrf_token%{%} ==

第三に、マザーボード

例(マスターファイル:base.html、次のように):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Title</title>
  {% block page-css %}
  {% endblock %}
</head>
<body>

<h1>这是母板的标题</h1>
{% block page-main %}
{% endblock %}

<h1>母板底部内容</h1>
{% block page-js %}
{% endblock %}
</body>
</html>

注意:我々は通常、サブページの交換を容易にするために、マザーボードのCSSやJSブロック内のページの専用ブロックを定義します。
***

テンプレートの継承

例(マスター上の例の承継):

{% extends 'base.html' %}

ブロック(ブロック)

==「ブロック」の定義にマスタに{%ブロックXXXの%} ==。使用して
、対応するマスタにサブページ内のマザーボードの名前を定義することによって、ブロック内の対応する内容を置き換えます。

例えば:

{% block page-css %}
...
{% endblock %}

{# 这是母板的标题 #}
{% block page-main %}
...
{% endblock %}

{# 母板底部内容 #}
{% block page-js %}
...
{% endblock %}


第四に、成分

そのようなナビゲーション、フッター情報成分として共通ページコンテンツは、必要に応じて使用することができる別のファイルに格納され、その後、次の構文に導入することができます。

{% include "文件全名" %}

例(ファイルbase.htmlにおけるファイル内導入nav.htmlコード):
ここに画像を挿入説明

第五に、静的ファイルは、関連します

==「/静的/」= STATIC_URLから設定ファイルを取得し、相対パススプライシング。==

{% load static %}
<img src="{% static 'images/hi.jpg' %}" alt="Hi!"/>

JSファイルを参照するときに使用します。

{% <script src="{% static 'mytest.js' %}"></script> %}

:ファイルには、多くの変数として保存することができ、同時に使用する場合

{% load static %}
{% static 'images/hi.jpg' as myphoto %}
<img src="{{ myphoto }}"><img>

例(インポートブートストラップファイル):
ここに画像を挿入説明
***

get_static_prefixを使用してください

==「/静的/」= STATIC_URLから設定ファイルを取得し、相対パススプライシング。==

{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />

# 或者

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}
<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />

例(ブートストラップファイルのインポート):
ここに画像を挿入説明


カスタムsimpletag_tag

わずか
***

カスタムinclusion_tag

1.作成という名前== tmplatetags == PythonパッケージでパケットのApp。
のパッケージに2 PY新しいファイル(例:mytags.py)
3.編集ファイルは、以下のステップ:
ここに画像を挿入説明



"

オリジナル:http://blog.gqylpy.com/gqy/261

おすすめ

転載: www.cnblogs.com/gqy02/p/11367289.html