测试开发之Django——No7.Django模板中的过滤器
1.add
将参数添加到值。
例如:
{{ value|add:"2" }}
如果value
是4
,那么输出将是6
。
此过滤器将首先尝试将两个值强制转换为整数。如果失败,它将尝试将值一起添加到一起。这将适用于某些数据类型(字符串,列表等),而对其他数据类型则失败。如果失败,结果将为空字符串。
例如,如果我们有:
{{ first|add:second }}
和first
是与是,那么输出将是。[1, 2, 3]
second
[4, 5, 6]
[1, 2, 3, 4, 5, 6]
2.addslashes
在引号前添加斜杠。例如,用于转义CSV中的字符串很有用。
例如:
{{ value|addslashes }}
如果value
是,输出将是 。"I'm using Django"
"I\'m using Django"
3.capfirst
将值的第一个字符大写。如果第一个字符不是字母,则此过滤器无效。
例如:
{{ value|capfirst }}
如果value
是"django"
,输出将是"Django"
。
4.center
将值置于给定宽度的字段中。
例如:
"{{ value|center:"15" }}"
如果value
是"Django"
,输出将是。" Django "
5.cut
从给定的字符串中删除arg的所有值。
例如:
{{ value|cut:" " }}
如果value
是,输出将是 。"String with spaces"
"Stringwithspaces"
6.date
根据给定的格式格式化日期。
使用与PHP date()
函数(https://php.net/date)类似的格式,但有一些差异。
可用格式字符串:
7.default
如果value的计算结果为False
,则使用给定的默认值。否则,使用该值。
例如:
{{ value|default:"nothing" }}
如果value
是""
(空字符串),则输出为nothing
。
8.default_if_none
如果(且仅当)值为None
,则使用给定的默认值。否则,使用该值。
请注意,如果给出空字符串,则不会使用默认值。default
如果要为空字符串回退,请使用过滤器。
例如:
{{ value|default_if_none:"nothing" }}
如果value
是None
,输出将是nothing
。
9.dictsort
获取字典列表并返回按参数中给出的键排序的列表。
例如:
{{ value|dictsort:"name" }}
如果value
是:
[
{'name': 'zed', 'age': 19},
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
]
然后输出将是:
[
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
{'name': 'zed', 'age': 19},
]
您还可以执行更复杂的操作,例如:
{% for book in books|dictsort:"author.age" %}
* {{ book.title }} ({{ book.author.name }})
{% endfor %}
如果books
是:
[
{'title': '1984', 'author': {'name': 'George', 'age': 45}},
{'title': 'Timequake', 'author': {'name': 'Kurt', 'age': 75}},
{'title': 'Alice', 'author': {'name': 'Lewis', 'age': 33}},
]
然后输出将是:
* Alice (Lewis)
* 1984 (George)
* Timequake (Kurt)
dictsort
也可以按__getitem__()
指定索引处的元素排序列表(或任何其他实现对象 )。例如:
{{ value|dictsort:0 }}
如果value
是:
[
('a', '42'),
('c', 'string'),
('b', 'foo'),
]
然后输出将是:
[
('a', '42'),
('b', 'foo'),
('c', 'string'),
]
您必须将索引作为整数而不是字符串传递。以下产生空输出:
{{ values|dictsort:"0" }}
10.dictsortreversed
获取字典列表并返回按参数中给出的键以相反顺序排序的列表。这与上面的过滤器完全相同,但返回的值将按相反的顺序排列。
11.divisibleby
True
如果值可以被参数整除,则返回。
例如:
{{ value|divisibleby:"3" }}
如果value
是21
,输出将是True
。
12.escape
转义字符串的HTML。具体来说,它使这些替换:
<
转换为<
>
转换为>
'
(单引号)转换为'
"
(双引号)转换为"
&
转换为&
应用escape
通常具有应用于结果的自动转义的变量只会导致进行一轮转义。因此,即使在自动转义环境中也可以安全地使用此功能。如果要应用多个转义传递,请使用force_escape
过滤器。
例如,您可以escape
在autoescape
关闭时应用于字段:
{% autoescape off %}
{{ title|escape }}
{% endautoescape %}
13.escapejs
转义用于JavaScript字符串的字符。这并没有使字符串安全为HTML或JavaScript模板文字的使用,但使用模板来生成JavaScript / JSON什么时候保护你的语法错误。
例如:
{{ value|escapejs }}
如果value
是,输出将是。"testing\r\njavascript \'string"<b>escaping</b>"
"testing\\u000D\\u000Ajavascript \\u0027string\\u0022\\u003Cb\\u003Eescaping\\u003C/b\\u003E"
14.filesizeformat
格式,如一个“人类可读”的文件大小的值(即, ,等等)。'13 KB'
'4.1 MB'
'102 bytes'
例如:
{{ value|filesizeformat }}
如果value
是123456789,则输出为。117.7 MB
文件大小和SI单位
严格地说,filesizeformat
当字节大小以1024的幂(这里是这种情况)计算时,不符合推荐使用KiB,MiB,GiB等的国际单位制。相反,Django使用与更常用的名称相对应的传统单元名称(KB,MB,GB等)。
15.first
返回列表中的第一个项目。
例如:
{{ value|first }}
如果value
是列表,则输出将是。['a', 'b', 'c']
'a'
16.floatformat
如果在没有参数的情况下使用,则将浮点数舍入到一个小数位 - 但前提是要显示小数部分。例如:
如果与数字整数参数一起使用,则将数字floatformat四舍五入到多个小数位。例如:
特别有用的是传递0(零)作为参数,它将浮点数舍入为最接近的整数。
如果传递给的参数floatformat为负数,它会将数字四舍五入到多个小数位 - 但只有在显示小数部分时才会这样。例如:
使用floatformat
不带参数等效于使用floatformat
具有的参数-1
。
17.force_escape
将HTML转义应用于字符串(escape
有关详细信息,请参阅过滤器)。此过滤器立即应用并返回一个新的转义字符串。这在极少数情况下非常有用,在这种情况下,您需要多次转义或希望将其他过滤器应用于转义结果。通常,您想使用escape
过滤器。
例如,如果要捕获过滤器<p>
创建的HTML元素linebreaks
:
{% autoescape off %}
{{ body|linebreaks|force_escape }}
{% endautoescape %}
18.get_digit
给定一个整数,返回请求的数字,其中1是最右边的数字,2是第二个最右边的数字,等等。返回无效输入的原始值(如果输入或参数不是整数,或者如果参数小于1)。否则,输出始终为整数。
例如:
{{ value|get_digit:"2" }}
如果value
是123456789
,输出将是8
。
19.iriencode
将IRI(国际化资源标识符)转换为适合包含在URL中的字符串。如果您尝试在URL中使用包含非ASCII字符的字符串,则必须执行此操作。
在已经通过urlencode
过滤器的字符串上使用此过滤器是安全的 。
例如:
{{ value|iriencode }}
如果value
是"?test=1&me=2"
,输出将是"?test=1&me=2"
。
20.join
使用字符串连接列表,如Python str.join(list)
例如:
{{ value|join:" // " }}
如果value
是列表,则输出将是字符串 。['a', 'b', 'c']
"a // b // c"
21.last
返回列表中的最后一项。
例如:
{{ value|last }}
如果value
是列表,则输出将是字符串。['a', 'b', 'c', 'd']
"d"
22.length
返回值的长度。这适用于字符串和列表。
例如:
{{ value|length }}
如果value
是或,输出将是 。['a', 'b', 'c', 'd']
"abcd"
4
过滤器返回0
未定义的变量。
23.length_is
返回True
如果值的长度为参数,或False
以其他方式。
例如:
{{ value|length_is:"4" }}
如果value
是或,输出将是 。['a', 'b', 'c', 'd']
"abcd"
True
24.linebreaks
用适当的HTML替换纯文本中的换行符; 单个换行符成为HTML换行符(),后面跟空行的换行符成为段落符号()。<br />
</p>
例如:
{{ value|linebreaks }}
如果value
是,输出将是。Joel\nis a slug
<p>Joel<br />is a slug</p>
25.linebreaksbr
将一段纯文本中的所有换行转换为HTML换行符()。<br />
例如:
{{ value|linebreaksbr }}
如果value
是,输出将是。Joel\nis a slug
Joel<br />is a slug
26.linenumbers
显示带行号的文本。
例如:
{{ value|linenumbers }}
如果value
是:
one
two
three
输出将是:
1. one
2. two
3. three
27.ljust
左对齐给定宽度的字段中的值。
参数:字段大小
例如:
"{{ value|ljust:"10" }}"
如果value
是Django
,输出将是。"Django "
28.lower
将字符串转换为全部小写。
例如:
{{ value|lower }}
如果value
是,输出将是 。Totally LOVING this Album!
totally loving this album!
29.make_list
返回变为列表的值。对于字符串,它是一个字符列表。对于整数,在创建列表之前将参数强制转换为字符串。
例如:
{{ value|make_list }}
如果value
是字符串"Joel"
,则输出将是列表 。如果是,输出将是列表。['J', 'o', 'e','l']
value
123
['1', '2', '3']
30.phone2numeric
将电话号码(可能包含字母)转换为其等效数字。
输入不必是有效的电话号码。这将很乐意转换任何字符串。
例如:
{{ value|phone2numeric }}
如果value
是800-COLLECT
,输出将是800-2655328
。
31.pluralize
如果值不是1,则返回复数后缀。默认情况下,此后缀为 's'
。
例:
You have {{ num_messages }} message{{ num_messages|pluralize }}.
如果num_messages
是1
,输出将是 如果是 输出将是You have 1 message.
num_messages
2
You have 2messages.
对于需要后缀以外的单词's'
,您可以提供备用后缀作为过滤器的参数。
例:
You have {{ num_walruses }} walrus{{ num_walruses|pluralize:"es" }}.
对于不通过简单后缀复数的单词,您可以指定单数和复数后缀,用逗号分隔。
例:
You have {{ num_cherries }} cherr{{ num_cherries|pluralize:"y,ies" }}.
注意
使用blocktrans
变复数翻译的字符串。
32.pprint
一个包装pprint.pprint()
- 用于调试,真的。
33.random
返回给定列表中的随机项。
例如:
{{ value|random }}
如果value
是列表,则输出可以是。['a', 'b', 'c', 'd']
"b"
34.rjust
右对齐给定宽度的字段中的值。
参数:字段大小
例如:
"{{ value|rjust:"10" }}"
如果value
是Django
,输出将是。" Django"
35.safe
将字符串标记为在输出之前不需要进一步的HTML转义。当自动关闭时,此过滤器无效。
36.safeseq
将safe
过滤器应用于序列的每个元素。与在序列上运行的其他过滤器结合使用,例如 join
。例如:
{{ some_list|safeseq|join:", " }}
safe
在这种情况下,您无法直接使用过滤器,因为它首先将变量转换为字符串,而不是使用序列的各个元素。
37.slice
返回列表的切片。
使用与Python列表切片相同的语法。有关 介绍,请参见 http://www.diveintopython3.net/native-datatypes.html#slicinglists。
例:
{{ some_list|slice:":2" }}
如果some_list
是,输出将是。['a', 'b', 'c']
['a', 'b']
38.slugify
转换为ASCII。将空格转换为连字符。删除不是字母数字,下划线或连字符的字符。转换为小写。还剥去前导和尾随空格。
例如:
{{ value|slugify }}
如果value
是,输出将是。"Joel is a slug"
"joel-is-a-slug"
39.stringformat
根据参数(字符串格式说明符)格式化变量。此说明符使用printf样式的字符串格式语法,但删除前导“%”除外。
例如:
{{ value|stringformat:"E" }}
如果value
是10
,输出将是1.000000E+01
。
40.striptags
尽一切努力去除所有[X] HTML标记。
例如:
{{ value|striptags }}
如果value
是,输出将是。"<b>Joel</b> <button>is</button> a <span>slug</span>"
"Joel is aslug"
41.time
根据给定的格式格式化时间。
给定格式可以是预定义格式,也可以是TIME_FORMAT
自定义格式,与date
过滤器相同。请注意,预定义格式取决于区域设置。
例如:
{{ value|time:"H:i" }}
如果value
相当于datetime.datetime.now()
,则输出将是字符串"01:23"
。
另一个例子:
假设那USE_L10N
是True
和LANGUAGE_CODE
,例如"de"
,那么:
{{ value|time:"TIME_FORMAT" }}
输出将是字符串"01:23"
(Django随附"TIME_FORMAT"
的de
语言环境的格式说明符"H:i"
)。
该time
过滤器将只接受格式字符串,涉及到一天的时间,而不是日期(原因很明显)参数。如果需要格式化date
值,请改用date
滤镜(或者time
如果需要渲染完整datetime
值,则使用滤镜 )。
有一个例外上面的规则:当传递一个datetime
附带时区信息(价值时区感知的 datetime
情况下)的time
过滤器会接受时区相关的格式说明 'e'
,'O'
,'T'
和'Z'
。
如果在没有格式字符串的情况下使用,TIME_FORMAT
则使用格式说明符:
{{ value|time }}
是相同的:
{{ value|time:"TIME_FORMAT" }}
42.timesince
将日期格式化为该日期以来的时间(例如,“4天,6小时”)。
采用一个可选参数,该参数是一个包含用作比较点的日期的变量(没有参数,现在是比较点)。例如,如果blog_date
是表示2006年6月1日午夜的日期实例,并且comment_date
是2006年6月1日08:00的日期实例,则以下内容将返回“8小时”:
{{ blog_date|timesince:comment_date }}
比较offset-naive和offset-aware datetimes将返回一个空字符串。
分钟是使用的最小单位,并且对于将来相对于比较点的任何日期将返回“0分钟”。
43.timeuntil
类似于timesince
,除了它测量从现在到给定日期或日期时间的时间。例如,如果今天是2006年6月1日并且conference_date
是2006年6月29日举行的日期实例,那么 将返回“4周”。{{ conference_date|timeuntil }}
采用可选参数,该参数是包含用作比较点(而不是现在)的日期的变量。如果from_date
包含2006年6月22日,则以下内容将返回“1周”:
{{ conference_date|timeuntil:from_date }}
比较offset-naive和offset-aware datetimes将返回一个空字符串。
分钟是使用的最小单位,并且对于过去相对于比较点的任何日期将返回“0分钟”。
44.title
通过使单词以大写字符开头而其余字符以小写字母开头,将字符串转换为标题。此标记不会将“琐碎的单词”保留为小写。
例如:
{{ value|title }}
如果value
是,输出将是。"my FIRST post"
"My First Post"
45.truncatechars
如果字符串长于指定的字符数,则截断该字符串。截断的字符串将以可翻译的省略号序列(“...”)结束。
参数:要截断的字符数
例如:
{{ value|truncatechars:9 }}
如果value
是,输出将是。"Joel is a slug"
"Joel i..."
46.truncatechars_html
类似于truncatechars
,除了它知道HTML标签。字符串中打开但在截断点之前未关闭的任何标记在截断后立即关闭。
例如:
{{ value|truncatechars_html:9 }}
如果value
是,输出将是 。"<p>Joel is a slug</p>"
"<p>Joel i...</p>"
将保留HTML内容中的换行符。
47.truncatewords
在一定数量的单词后截断一个字符串。
参数:要截断的单词数
例如:
{{ value|truncatewords:2 }}
如果value
是,输出将是。"Joel is a slug"
"Joel is ..."
字符串中的换行符将被删除。
48.truncatewords_html
类似于truncatewords
,除了它知道HTML标签。在截断点之前立即关闭在字符串中打开但在截断点之前未关闭的任何标记。
这效率低于truncatewords
,因此只应在传递HTML文本时使用。
例如:
{{ value|truncatewords_html:2 }}
如果value
是,输出将是 。"<p>Joel is a slug</p>"
"<p>Joel is ...</p>"
将保留HTML内容中的换行符。
49.unordered_list
递归地获取自嵌套列表并返回HTML无序列表 - 没有打开和关闭<ul>标记。
该列表被假定为正确的格式。例如,如果var
包含,则 返回:['States', ['Kansas', ['Lawrence','Topeka'], 'Illinois']]
{{ var|unordered_list }}
<li>States
<ul>
<li>Kansas
<ul>
<li>Lawrence</li>
<li>Topeka</li>
</ul>
</li>
<li>Illinois</li>
</ul>
</li>
50.upper
将字符串转换为全部大写。
例如:
{{ value|upper }}
如果value
是,输出将是。"Joel is a slug"
"JOEL IS A SLUG"
51.urlencode
转义值以在URL中使用。
例如:
{{ value|urlencode }}
如果value
是"https://www.example.org/foo?a=b&c=d"
,输出将是"https%3A//www.example.org/foo%3Fa%3Db%26c%3Dd"
。
可以提供包含不应转义的字符的可选参数。
如果未提供,则假定'/'字符是安全的。当应该转义所有字符时,可以提供空字符串。例如:
{{ value|urlencode:"" }}
如果value
是"https://www.example.org/"
,输出将是 "https%3A%2F%2Fwww.example.org%2F"
。
52.urlize
将文本中的URL和电子邮件地址转换为可单击的链接。
这个模板标签适用于前缀链接http://
,https://
或 www.
。例如,https://goo.gl/aia1t
将被转换,但goo.gl/aia1t
不会。
它还支持在原有的顶级域名之一(网域内的链接结束.com
,.edu
,.gov
,.int
,.mil
,.net
,和 .org
)。例如,djangoproject.com
转换。
链接可以有尾随标点符号(句点,逗号,近距离标记)和标点符号(开放标准),并且urlize
仍然会做正确的事情。
通过生成的链接urlize
有一个rel="nofollow"
属性添加到他们。
例如:
{{ value|urlize }}
如果value
是,输出将是 。"Check out www.djangoproject.com"
"Check out <ahref="http://www.djangoproject.com" rel="nofollow">www.djangoproject.com</a>"
除了网络链接,urlize
还可以将电子邮件地址转换为 mailto:
链接。如果value
是 ,输出将是 。"Send questionsto foo@example.com"
"Send questions to <ahref="mailto:foo@example.com">foo@example.com</a>"
该urlize
过滤器有一个可选的参数autoescape
。如果 autoescape
是True
,链接文本和URL将使用Django的内置escape
过滤器进行转义。autoescape
is 的默认值 True
。
注意
如果urlize
应用于已包含HTML标记的文本,则事情将无法按预期工作。仅将此过滤器应用于纯文本。
53.urlizetrunc
将URL和电子邮件地址转换为可点击的链接,就像urlize一样,但会截断超过给定字符限制的URL。
参数:链接文本的字符数应截断为,包括在需要截断时添加的省略号。
例如:
{{ value|urlizetrunc:15 }}
如果value
是,输出将是 。"Check out www.djangoproject.com"
'Check out <ahref="http://www.djangoproject.com" rel="nofollow">www.djangopr...</a>'
与urlize一样,此过滤器应仅应用于纯文本。
54.wordcount
返回单词数。
例如:
{{ value|wordcount }}
如果value
是,输出将是。"Joel is a slug"
4
55.wordwrap
在指定的行长度处包装单词。
参数:包装文本的字符数
例如:
{{ value|wordwrap:5 }}
如果value
是,输出将是:Joel is a slug
Joel
is a
slug
56.yesno
地图值True
,False
和(可选地)None
,以把面条的“是”,“否”,“也许”,或自定义映射作为逗号分隔的列表通过,并返回根据值的那些字符串之一:
例如:
{{ value|yesno:"yeah,no,maybe" }}
57.get_static_prefix
您应该更喜欢static
模板标记,但如果您需要更多地控制STATIC_URL
注入模板的确切位置和方式,则可以使用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!" />
58.get_media_prefix
与之类似get_static_prefix
,get_media_prefix
使用媒体前缀填充模板变量MEDIA_URL
,例如:
{% load static %}
<body data-media-url="{% get_media_prefix %}">
测试开发之Django——No7.Django模板中的过滤器的更多相关文章
- django的html模板中获取字典的值
在django的html模板中获取字典中的值应当直接使用 字典.[key] 的方式 {% for i in lists %} <li id="{{i.id}}" class ...
- 测试开发之Django——No6.Django模板中的标签语言
模板中的标签语言 1.if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即:变量存在,非空,不是布尔值假),系统会显示在{% if %} 和 {% endi ...
- 测试开发之Django——No4.Django中前端框架的配置与添加
我们在开发一个web项目的时候,虽然我们不是专业开发,但是我们也想要做出来一个美美的前端页面. 这种时候,百度上铺天盖地的前端框架就是我们的最好选择了. 当然,在网上直接下载的框架,我们是不能直接用的 ...
- 测试开发之Django——No3.Django中的试图(views)
说到views,我们先来说django中执行的一个顺序. 我们打开一个django中配置的页面,之后的执行是有这么几个步骤: 1.系统配置的urls中寻找是否配置了这个地址: 2.如果已经配置了这个地 ...
- 测试开发之Django——No1.介绍以及引申
前言 > 测试行业发展飞速,自动化测试兴起,由此对测试人员的要求与日俱增.随时而来的,就是职能的增加. > 首先需要学习的,就是自动化测试.而由自动化测试引申而来的,就是另外几个新增的岗位 ...
- Django 模板中 变量 过滤器的使用方法
一.变量 1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量. 2.使用dot(.)能够访问变量的属性 3.当模板引擎碰到dot的 ...
- Django 模板中 变量 过滤器 标签 的使用方法
一.变量 1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量. 2.使用dot(.)能够访问变量的属性 3.当模板引擎碰到dot的 ...
- 微信小程序开发之formId使用(模板消息)
基于微信小程序的模板消息:基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验.模板推送位置:服务通知模板下发条件:用户本人在微信体系内与页面有交互 ...
- flask的jinja2模板中过过滤器的相关小内容
jinja2模板中有自带的过滤器,有需要直接拿来使用.也可以自己定义过滤器 在过滤器中,有一些常见得操作及关键字.有对字符串的操作,还有对大小写转换的操作.还有对list的操作 过滤器的语法 {# 过 ...
随机推荐
- Shell中while循环的done 后接一个重定向<
读文件的方法: 第一步: 将文件的内容通过管道(|)或重定向(<)的方式传给while 第二步: while中调用read将文件内容一行一行的读出来,并付值给read后跟随的变量.变量中就保存了 ...
- (递推)一只小蜜蜂... hdu2044
一只小蜜蜂... 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2044 Time Limit: 2000/1000 MS (Java/Others) ...
- MUI 自定义从底部弹出的弹出框
1)效果: 点击“点击就送”那个按钮之后,弹窗从底部弹出并自带蒙层,然后点击弹窗之外的灰色部分就从底部消失: 第一步:引入 mui.css或者mui.min.css 引入 mui.min.js或者mu ...
- maven自动打包上传nexus仓库配置
一个基础类,可能要升级并放到私服库里,为了方便,应该能够自动打包放到nexus.这就需要配置maven一些参数与pom.xml. 依次在settings.xml文件裡輸入 <!-- nexus帳 ...
- SQL Server 关于CROSS APPLY 和 OUTER APPLY应用
先看看语法: <left_table_expression> {cross|outer} apply<right_table_expression> 再让我们了解一下appl ...
- How to get API key (APPID)
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- mysql -- 逻辑语句
1.if语句 delimiter \\ create procedure p1() begin declare i ; then ; elseif i = then ; else ; end if; ...
- maven中经常使用的插件
tomcat插件:非常实用,特点就是不用配置tomcat,可以任意修改端口号. <plugin> <groupId>org.apache.tomcat.maven</gr ...
- python 创建实例--待完善
今天好好琢磨一下 python 创建实例的先后顺序 一. 就定义一个普通类 Util (默认)继承自 object,覆写 new ,init 方法 class Util(object): def __ ...
- Docker 入门 第五部分:Stacks
目录 Docker 入门 第五部分:Stacks 先决条件 介绍 添加一个新的服务并重新部署 保存数据 回顾 Docker 入门 第五部分:Stacks 先决条件 安装 Docker 1.13 或更高 ...