Django テンプレート言語の詳細な紹介 (コード付き)
この記事では、Django テンプレート言語 (コード付き) について詳しく説明します。これには一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。
共通構文
{{ }} および {% %}
変数関連には {{}} を使用し、ロジック関連には {% %} を使用します
変数
Django のテンプレート言語でこの構文を使用します: {{ 変数名}}。
テンプレート エンジンは変数を検出すると、その変数を評価し、それ自体を結果で置き換えます。
変数の名前には、文字、数字、アンダースコア (「_」) の任意の組み合わせが含まれます (数字で始めることはお勧めしません)。
変数名にはスペースや句読点を含めることはできません。
ドット (.) は、テンプレート言語では特別な意味を持ちます。
テンプレート システムがドット (「.」) に遭遇すると、次の順序でクエリを実行します:
辞書検索
属性またはメソッド検索 )
数値インデックス検索
ビュー内のコード:#def template_test(request):
l = [11, 22, 33]
d = {"name": "alex"}
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def dream(self):
return "{} is dream...".format(self.name)
Alex = Person(name="Alex", age=34)
Egon = Person(name="Egon", age=9000)
Eva_J = Person(name="Eva_J", age=18)
person_list = [Alex, Egon, Eva_J]
return render(request, "template_test.html", {"l": l, "d": d, "person_list": person_list})
{# 取l中的第一个参数 #} {{ l.0 }} {# 取字典中key的值 #} {{ d.name }} {# 取对象的name属性 #} {{ person_list.0.name }} {# .操作只能调用不带参数的方法 #} {{ person_list.0.dream }}
フィルター:
#Django のテンプレート言語では、フィルターを使用して変数の表示を変更します。 フィルター構文: {{ value|filter_name:parameter }}
パイプ文字「|」を使用してフィルターを適用します。
例: {{ name| lower }} は、name 変数に lower フィルターを適用し、その値を表示します。ここでの lower の機能は、すべてのテキストを小文字に変換することです。
注:
1. フィルターは「チェーン」操作をサポートします。つまり、1 つのフィルターの出力は別のフィルターの入力として機能します。
2. フィルターはパラメーターを受け入れることができます (例: {{ sss|truncatewords:30 }})。これにより、sss の最初の 30 単語が表示されます。 (パラメータは 1 つだけ、または何も指定できません)
3. フィルタ パラメータにスペースが含まれる場合は、引用符で囲む必要があります。たとえば、{{ list|join:', ' }}
4 のように、カンマとスペースを使用してリスト内の要素を接続します。「|」と「:」の前後にはスペースを入れません。
Django テンプレート言語には約 60 個の組み込みフィルターが用意されています
default
変数が false または空の場合は、指定されたデフォルト値を使用し、それ以外の場合は、 variable.
{{ value|default:'nothing'}}
OPTIONS にはオプションを追加できます: string_if_invalid: 'Cannot find To '値 value がアップロードされていない場合、無効な値でデフォルトの関数を置き換えることができます。
length 値の長さを返し、文字列とリストに適用されます。
{{value|length}} 戻り値値の長さ (value=['a','b','c','d'] など) は、4
filesizeformat と表示されます。値を「人間が読める」ファイルにフォーマットします。スケール (例: '13 kb'、'4.2 MB' など)
{{value|filesizeformat}} 値が 123456789 の場合、出力は 117.7MB になります。
add変数パラメータに追加します。
{{value|add:'2'}} value が数値 1 の場合、出力結果は 3
{{first|add:second}} になります。 1 つ目は [1, 2,3]、2 つ目は [4,5,6]、結果は次のようになります: [1,2,3,4,5,6]
ljust 左揃え
''{{value|ljust:'10'}}''
rjust 右揃え
"{{value|rjust:'10'}}"
センター センター
"{{value|center:'15'}}"
スライス スライス
{{value|slice:'2:-1'}}
日付の書式設定
{{value|date:'Y-m-d H:i:s'}}
# #安全#### ##
Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。
(Django模块中有自己的安全机制,不是你写什么就按照原代码执行,比如危险代码,违规内容等,加上|safe 过滤器,会让你的代码按照原有的意思执行,解除安全机制.)
比如:
value = '<a href=#>点我</a>'
{{values|safe}}
truncatechars
如果字符串字符多余指定的字符数量,那么会被截断.截断的字符串将以可翻译的省略号序列('...') 结尾.
参数: 截断的字符串
{{values|truncatechars:9}}
注意: 连在一起意为一个单词,空格隔开则表示另一个单词.比如把标点符号和单词连一起,则表示一个单词.
truncatewords
在一定数量的字后截断字符串
{{value|truncatewords:9}}
cut 移除value中所有的与给出的变量相同的字符串
{{value|cut:' '}} (如果value为'da sha bi',那么将输出为"dashabi")
join 使用字符串连接列表,例如Python的str.join(list)
timesince 将日期格式设为该日期起的时间
采用一个可选参数,它是一个包含用作比较点的日期的变量(不带参数,比较点为现在)。 例如,如果blog_date是表示2006年6月1日午夜的日期实例,并且comment_date是2006年6月1日08:00的日期实例,则以下将返回“8小时”:
{{conference_date|timeuntil:from_date}}
自定义filter
自定义过滤器只是带有一个或俩个参数Python函数:
变量(输入) 的值 不一定是一个字符串
参数的值 这可以有一个默认值,或完全省略
例如, 在过滤器{{var|foo:'bar'}}中,过滤器foo将传递变量var和变量'bar'.
自定义filter代码文件摆放位置:
app01/ __init__.py models.py templatetags/ # 在app01下面新建一个package package,文件名字必须是templatetags __init__.py app01_filters.py # 建一个存放自定义filter的文件,文件名自定义 views.py
编写自定义filter
from django import template # 固定写法,生成一个注册实例对象 register = template.Library() #以上为固定写法,不能随意改变 @register.filter(name="cut") # 告诉Django模板语言我现在注册一个自定义的filter. def cut(value, arg): # 第一个参数为变量,第二个参数可以没有,是过滤器参数 return value.replace(arg, "") @register.filter(name="addSB")# 若括号内有name,则表示过滤器名称改变为name后的名字 def add_sb(value): return "{} SB".format(value) # 引用该过滤器就会把value值后面加上SB
使用自定义filter
{# 先导入我们自定义filter那个文件 #} {% load app01_filters %} {# 使用我们自定义的filter #} {{ somevariable|cut:"0" }} {{ d.name|addSB }}
自定义filter步骤
定义:
1. 在app目录下创建一个名为 templatetags 的python包
2. 在上面创建的包内部创建一个python文件: ooxx.py
3. 在ooxx.py文件中按照固定的格式注册的一个自定义的filter
from django import template
# 固定写法,生成一个注册实例对象 register = template.Library() @register.filter() # 告诉Django的模板语言我现在注册一个自定义的filter def add_sb(value): """ 给任意指定的变量添加sb :param value: |左边被修饰的那个变量 :return: 修饰后的变量内容 """ return value + 'sb'
@register.filter() def add_str(value, arg): return value + arg
使用:
1. 重启Django项目
2. 在HTML页面中:{% load python文件名 %}
3. {{ name|add_str:'大好人' }}
Tags
for
<ul> {% for user in user_list %} <li>{{forloop.counter}}-{{ user.name }}</li> {% endfor %} </ul>
for循环可用的一些参数:
注意:本层循环的外层循环即是父层循环,上一层循环.
for empty 当for 后面的条件不成立时执行empty后面的程序
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% empty %} <li>空空如也</li> {% endfor %} </ul>
if , elif 和 else
{% if user_list %} 用户人数:{{ user_list|length }} {% elif black_list %} 黑名单数:{{ black_list|length }} {% else %} 没有用户 {% endif %}
当然也可以只有if和else
{% if user_list|length > 5 %} 七座豪华SUV {% else %} 黄包车 {% endif %}
注意: if语句支持and, or, ==, >,<, !=, <=, >=, in, not in, is not 判断不支持 算术运算.(+, -, *, /)
with:定义一个中间变量
{% with total=business.employees.count %} # 把business.employee.count用total表示 {{ total }} employee{{ total|pluralize }} {% endwith %}
csrf_token:这个标签用于跨站请求伪造保护.
在页面的form表单里写上{%csrf_token%}即可通过,会自动生成一串验证码(64个).
(传说中46行注释,可以取消注释,)
注释 {# ... #}
注意事项
1. Django的模板语言不支持连续判断,即不支持以下写法:
{% if a>b>c %} ... {% endif %}
2. Django的模板语言中属性的优先级大于方法
def xx(request): d = {"a": 1, "b": 2, "c": 3, "items": "100"} return render(request, "xx.html", {"data": d})
如上,我们在使用render方法渲染一个页面的时候,传的字典d有一个key是items并且还有默认的d.items()方法,此时在模板语言中:
{{ data.items }}默认会取d的items key的值
母版
<!DOCTYPE html> <html> <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块,可以在子页中写出相对应的块的名称,表示操作该块,并替换掉母板中的对应块里的内容.--> {% block page-main %} {% endblock %} <h1>母板底部内容</h1> {% block page-js %} {% endblock %} </body> </html>
注意: 我们通常会在母板中定义页面专用的css块和js块,方便子页面替换.
继承母板
在子页面中,在子页面最上方使用下面的语法来继承母板.
{% extends 'layouts.html' %}
块(block)
通过在母板中使用{% block ×××%}来定义'块'.
在子页中通过使用定义的母板中的block名来对应替换母板中的相应内容.
{% block page-main %} <p>世情薄</p> <p>人情恶</p> <p>雨送黄昏花易落</p>{% endblock %}
注意:
{% extends 'base.html' %}要写在子页面第一行(子页面代码的最前面)
{% extends ''name'' %} name 写继承的母板的名字要是字符串形式,若不加 ' ' 则表示变量自定义的内容要写在block中
组件
可以将常用的页面内容如导航条,页尾信息等组件保存在单独文件中,然后在需要使用的地方按如下语法导入即可:
{% include 'navbar.html' %}
(直接创建一个html文件,把常用的内容粘贴即可,'' 内填写文件名称,如有必要也要把路径写上)
静态相关文件
Django项目中,路径前的static并不是文件名字,而是setting文件中的 " STATIC_URL = '/static/' "
# 能够动态地拼接路径,比如当'STATIC_URL = '/static/''中的static改变时,就需要把以前文件中 已经写死了的static全部改变,但是如果能动态地拼接就不需要如此麻烦. {% load static %} <img src='{% static 'image/hi.jpg' %}' alt='Hi!' /> #引用JS文件时使用: {% load static %} <script src="{% static "mytest.js" %}"></script> #某文件多处被用到可以存为一个变量 {% load static %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}"></img>
使用 get_static_prefix
表示拿到static这一别名
使用get_static_prefix {% 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
和自定义filter类似,只不过接受更灵活的参数(可以接受若干参数).
定义注册 simple tag
@register.simple_tag(name="plus")def plus(a, b, c): return "{} + {} + {}".format(a, b, c)
使用自定义 simple tag
{% load app01_demo %} {# simple tag #}{% plus "1" "2" "abc" %}
inclusion_tag 多用于返回html代码片段
示例: templatetags/my_inclusion.pyfrom django import template
register = template.Library() # 以上固定写法 @register.inclusion_tag('result.html') # 括号内为文件名 def show_results(n): n = 1 if n < 1 else int(n) data = ["第{}项".format(i) for i in range(1, n+1)] return {"data": data} # 字典内传给代码段的参数,必须是可迭代的
templates/result.html
<ul> {% for choice in data %} <li>{{ choice }}</li> {% endfor %}</ul>
templates/index.heml
<!DOCTYPE html> <html> <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>inclusion_tag test</title> </head> <body> {% load my_inclusion %} {% show_results 10 %} # 参数是10 </body> </html>
以上がDjango テンプレート言語の詳細な紹介 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Django のバージョンを確認する手順: 1. ターミナルまたはコマンド プロンプト ウィンドウを開きます; 2. Django がインストールされていることを確認します Django がインストールされていない場合は、パッケージ管理ツールを使用してインストールし、 pip install django コマンドを入力します。 3. インストールが完了したら、python -m django --version を使用して Django のバージョンを確認できます。

Django と Flask はどちらも Python Web フレームワークのリーダーであり、それぞれに独自の利点と適用可能なシナリオがあります。この記事では、これら 2 つのフレームワークを比較分析し、具体的なコード例を示します。開発の概要 Django はフル機能の Web フレームワークであり、その主な目的は、複雑な Web アプリケーションを迅速に開発することです。 Django は、ORM (オブジェクト リレーショナル マッピング)、フォーム、認証、管理バックエンドなどの多くの組み込み機能を提供します。これらの機能により、Django は大規模なデータを処理できるようになります。

Django は、Web 開発ライフサイクルのあらゆる側面をカバーする完全な開発フレームワークです。現在、このフレームワークは世界中で最も人気のある Web フレームワークの 1 つです。 Django を使用して独自の Web アプリケーションを構築する場合は、Django フレームワークの長所と短所を理解する必要があります。具体的なコード例も含め、知っておくべきことはすべてここにあります。 Django の利点: 1. 迅速な開発 - Django は Web アプリケーションを迅速に開発できます。豊富なライブラリと内部を提供します。

Django のバージョンを確認する方法: 1. コマンド ラインで確認するには、ターミナルまたはコマンド ライン ウィンドウで「python -m django --version」コマンドを入力します。 2. Python 対話型環境で確認するには、「import django」と入力します。 print(django.get_version())" code; 3. Django プロジェクトの設定ファイルを確認し、インストールされているアプリケーション情報を含む INSTALLED_APPS という名前のリストを見つけます。

違いは次のとおりです。 1. Django 1.x シリーズ: これは、バージョン 1.0、1.1、1.2、1.3、1.4、1.5、1.6、1.7、1.8、および 1.9 を含む、Django の初期バージョンです。これらのバージョンは主に基本的な Web 開発機能を提供します; 2. Django 2.x シリーズ: これは、2.0、2.1、2.2 およびその他のバージョンを含む Django の中期バージョンです; 3. Django 3.x シリーズ: これは最新バージョンですDjango シリーズ。バージョン 3.0、3 などを含む。

Django バージョンをアップグレードする方法: 手順と考慮事項、必要な特定のコード例 はじめに: Django は、より優れたパフォーマンスとより多くの機能を提供するために継続的に更新およびアップグレードされる強力な Python Web フレームワークです。ただし、古いバージョンの Django を使用している開発者にとって、Django のアップグレードはいくつかの課題に直面する可能性があります。この記事では、Djangoのバージョンアップの手順や注意点、具体的なコード例を紹介します。 1. Djan をアップグレードする前にプロジェクト ファイルをバックアップします。

バックエンドは django です。詳細: Django は主にバックエンド フレームワークですが、フロントエンド開発と密接に関連しています。 Django のテンプレート エンジン、静的ファイル管理、RESTful API などの機能を通じて、フロントエンド開発者はバックエンド開発者と協力して、強力でスケーラブルな Web アプリケーションを構築できます。

Django、Flask、FastAPI: 初心者に適したフレームワークはどれですか?はじめに: Web アプリケーション開発の分野では、優れた Python フレームワークが数多くあります。この記事では、最も人気のある 3 つのフレームワーク、Django、Flask、および FastAPI に焦点を当てます。それらの機能を評価し、初心者が使用するのに最適なフレームワークについて説明します。同時に、初心者がこれらのフレームワークをよりよく理解できるように、いくつかの具体的なコード例も提供します。 1.ジャンゴ:ジャンゴ
