HTML標簽相關的字符串格式化
string nl2br ( string $string )
nl2br() 就是將\n 替換成 <br> //javascript對\n才能夠執行換行,對</br>是不能執行換行
htmlspecialchars() 把一些預定義的字符轉換為 HTML 實體。
string htmlspecialchars(string,quotestyle,[character-set])
轉換以下字符及對應的實體
& (和號) 成為 &
" (雙引號) 成為 "
' (單引號) 成為 '
< (小于) 成為 <
> (大于) 成為 >
第二個參數: ENT_COMPAT 只轉換雙引號, 保留單引號, 為默認值 compat: 兼容性
ENT_QUOTES 同時轉換兩種引號 quotes: 引號
ENT_NOQUOTES 不對引號進行轉換
<html>
<body>
<?php
$str = "John & \" 'Adams'";
echo htmlspecialchars($str, ENT_COMPAT);
echo "<br />";
echo htmlspecialchars($str, ENT_QUOTES);
echo "<br />";
echo htmlspecialchars($str, ENT_NOQUOTES);
?>
</body>
</html>
輸出結果:John & " 'Adams'
John & " 'Adams'
John & " 'Adams'
htmlentities() 可以將所有的非ASCII碼字符轉換為對應的實體代碼;除字母、數字、\外, 漢字和鍵盤上其他字符都轉換
<?php
$str = "A 'quote' \" is <b>bold</b>" ;
echo htmlentities ( $str ); // 輸出后源代碼: A 'quote' is <b>bold</b>
echo htmlentities ( $str , ENT_QUOTES ); // 輸出后源代碼: A 'quote' is <b>bold</b>
?>
返回的結果:A 'quote' "is <b>bold</b>
A 'quote' "is <b>bold</b>
注意: htmlspecialchars()和htmlentities作用直接輸出HTML腳本
htmlspecialchars()和htmlentities()函數對于轉義字符"\"處理,不會轉義實體代碼,要么當轉義字符對待,要么原樣輸出;
PHP中htmlentities和htmlspecialchars的區別
這兩個函數的功能都是轉換字符為HTML字符編碼, 特別是url和代碼字符串。防止字符標記被瀏覽器執行。
使用中文時沒什么區別, 但htmlentities會格式化中文字符使得中文輸入是亂碼。
htmlentities轉換所有的html標記, htmlspecialchars只格式化& ' " < 和 > 這幾個特殊符號
addslashes() 在指定的預定義字符前添加反斜杠。
這些預定義字符是:單引號 (') 雙引號 (") 反斜杠 (\) NULL字符(\x00)
提示:該函數可用于為存儲在數據庫中的字符串以及數據庫查詢語句準備合適的字符串。
注釋:默認情況下,PHP 指令 magic_quotes_gpc 為 on,對所有的 GET、POST 和 COOKIE數據自動運行 addslashes()。
不要對已經被magic_quotes_gpc轉義過的字符串使用 addslashes(),因為這樣會導致雙層轉義。
遇到這種情況時可以使用函數 get_magic_quotes_gpc() 進行檢測。(如:$c=(!get_magic_quotes_gpc())?addslashes($c):$c;)
在本例中,我們要向字符串中的預定義字符添加反斜杠:
<?php
$str = "Who's John Adams?";
echo $str . " This is not safe in a database query.<br />";
echo addslashes($str) . " This is safe in a database query.";
?>
輸出:
Who's John Adams? This is not safe in a database query.
Who\'s John Adams? This is safe in a database query.
<?php
header("Content-type:text/html; charset=utf-8");
$str = "wo are \x0a studying \x00 php";
echo $str;
echo "<br>";
echo addslashes($str);
?>
輸出:
wo are studying php
wo are studying >wo are studying \0 php< php
stripslashes() 刪除反斜線("\")
在提交的表單數據中 ' " \ 等字符前被自動加上一個\ ,這是配置文件php.ini中選項magic_quotes_gpc在起作用,
默認是打開的,如果不處理則將數據保存到數據庫時,有可能會被數據庫誤當成控制符號而引起錯誤。
通常htmlspecialchars()和stripslashes()函數復合的方式,聯合處理表單中的提交的數據htmlspecialchars(stripslashes())
strip_tags()
string strip_tags ( string $str [, string $allowable_tags ] )
剝去 HTML、XML 以及 PHP 的標簽。
<?php
echo strip_tags("Hello <b><i>world!</i></b>","<b>");
?>
輸出結果:Hello world!
實例:
<?php
$str = "<b>webserver;</b> & \ 'Linux' & Apache";
echo "$str"; //直接輸出
echo "<br/>";
echo htmlspecialchars($str,ENT_COMPAT); //只轉換雙引號,為默認參數
echo "<br />";
echo htmlspecialchars($str,ENT_NOQUOTES); //不對引號進行轉換
echo "<br />";
echo htmlspecialchars($str,ENT_QUOTES); //同時轉換單引號和雙引號
echo "<br />";
echo htmlentities($str); //將所有的非ASCII碼字符轉換為對應的實體代碼
echo "<br />";
echo addslashes($str); //將" ' \ 字符前添加反斜線
echo "<br />";
echo stripslashes($str); //刪除反斜線
echo "<br />";
echo strip_tags($str); //刪除<html>標記
?>
輸出結果:
webserver; & \ 'Linux' & Apache
么首先來說明下什么時Filter什么時tag了,如何去區分了
1、在使用上區別:
filter 使用方法{{ obj|filter:param }}
tag使用方法{% tags %}
2、filter可以使用作為if判斷語句的標簽,標簽時不可以的
3、filter最多只能傳遞兩個參數,而且tag可以傳遞多個
filter使用說明
語法的格式如下
{{ obj|filter:param }}
obj 我們需要處理的對象
filter 我們的filter,常見有如下羅列出的
param filter的參數
1、add
添加相應的值,這個比較好理解,例如:
{{ 3|add:2 }} //那么這個就是3+2最后結果等于5,當然了我們的3一般時python傳過來的變量了。
注意前面的obj只能時整形數值,字符串無法相加
age|add:3
2、addslashes
給變量中的引號前加上斜線,就是轉譯引號,
例如:
{{"q'mm'df"|addslashes}}
那么該輸出接入如下
q\'mm\'df
3、capfirst
首字目大寫,很好理解不多說
例如:
{{"q'mm'df"|capfirst}}
那么輸出結果如下:
Q'mm'df
4、cut
把指定的字符串剪切掉
例如我們把單引號去掉:
{{"q'mm'df"|cut:"'"}}
輸出如下:
Qmmdf
5、date
格式化時間日期顯示,注意了,需要處理的對象必須時時間對象類型
例如:
dt變量類容為:{{ dt }}<br>
處理后的內容:{{ dt|date:'Y-m-d' }}
輸出結果如下:
dt變量類容為:April 6, 2018, 1:07 p.m.
處理后的內容:2018-04-06
6、default
如果值是False,就替換成設置的默認值,否則就是用本來的值
例如:
{{False|default:"這是False"}}
<br>
{{True|default:"這是True"}}
輸出結果如下:
這是False
True
7、default_if_none
如果值是None,就替換成設置的默認值,否則就使用本來的值,和default差不多原理
例如:
{{ None|default_if_none:"沒有值默認替換" }}
<br>
{{ " "|default_if_none:"就算有一個空格也是不會替換的" }}
輸入結果如下:
沒有值默認替換
8、filesizeformat
對數字進行格式化,IT中經常使用到的容量顯示技術
例如:
{{ "5120"|filesizeformat }}
結果就是
5.0 KB
9、first、last、slice
字符串處理,first取第一個字符,last去最后一個字符,slice切片和python中一樣使用
例如:
{{ "5120"|last }}
<br>
{{ "5120"|first }}
<br>
{{ "5120"|slice:":-2" }}
結果:
0
5
51
10、safe、autoescape、striptags
讓瀏覽器渲染我們的變量內容,
例如:
原始變量:{{ dt }}
<br>
有時候我們想瀏覽器去渲染我們在數據庫等地方取出來的html語言:
<br>
第一種方法,也是最常用的,使用safe:<br>
{{ dt|safe }}
<br>
第二種方法,使用autoescape off,注意了autoescape 就是標簽了:<br>
{% autoescape off%}
{{ dt }}
{% endautoescape %}
<br>
第三種方法,使用striptags,注意該方法,會去除html語言標記哦:<br>
{{ dt|striptags }}
效果如下:
當然還有很多的filter,以上羅列出來的只是我們常用的,更多的filter請查看官方文檔
https://docs.djangoproject.com/en/2.0/ref/templates/builtins/
一般常用的標簽tag說明:
1、最常用的if標簽 {% if %}
{% if 條件表達式 %}
表達式成立執行代碼塊
{% elif 條件表達式 %}
表達式成立執行代碼塊
{% else %}
所有表達式不成立執行代碼塊
{% endif %}
2、循環標簽{% for %}的使用
{% for object in objects %}
執行的循環體
{% endfor %}
3、{%csrf_token%} 跨站攻擊校驗
請求網頁時會生成一個csrf校驗字符串,防止跨站請求工具,注意如果我們使用render_to_response方法,這個就不生效。
使用方法,在from表單中直接使用{% csrf_token %}
在前臺我們每次請求,會隨機生產一個校驗碼,在表單提交時后臺會進行校驗
4、{% url %} 鏈接url
顯示指定路由的URL路徑,具體查看上面的兩個截圖,我們需要在url路由指定name,前面進行調用
5、{% with %} 變量替換
例如把一個長的變量做一個短的別名
{% with total=www.qnjslm.com %}
{{ total }}
{% endwith %}
6、{% verbatim %}: 禁止進行渲染
有時候我們需要在頁面上顯示模板語言的原型,就會用到verbatim ,還記得上面的safe的filter
{% verbatim %}
{{ 123|add:2 }}
{% endverbatim %}
7、{% load %}加載標簽庫
我們使用最多的就是加載自定義標簽庫了,產靠下一節的演示
現在來介紹我們自定義Tag以及Filter
第一步:在APP目錄下創建一個模塊名字為templatetags(注意名字必須時這個)
第二步:在templatetags目錄下創建py文件,這個文件名字可以隨意了
第三步:創建我們自定義的filter以及tag
1、首先需要引用template,如果需要返回html內容需要引入mark_safe
from django import template
from django.utils.safestring import mark_safe
2、實例化一個對象,注意這里必須使用register 來接收,不可以使用其他名稱
register = template.Library()
3、定義自已的函數,使用裝飾器@register.filter、@register.simple_tag
4、在Django的設置中,在APP中一定加載我們的APP名稱
5、在模板中我們使用load加載我們的文件名,就可以安裝上面的方法進行使用
{% load my_test %}
詳細代碼(my_test):
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.filter
def filter_multi(v1, v2):
return v1 * v2
@register.simple_tag
def tag_multi(v1, v2, v3):
return v1 * v2 + v3
@register.simple_tag
def input_multi(id, name, class_name):
result = "<input id='%s' class='%s' name='%s'/>" % (id, class_name, name)
return mark_safe(result)
模板中我們使用
前臺的效果如下圖
模板的標簽(Tags):
標簽的使用:{% Tags %}
autoescape
自動轉義標簽,要在html中原樣輸出html標簽的時候使用
{% autoescape on %}
{{ body }}
{% endautoescape %}
對body的內容進行轉義,原樣輸出html標簽
block
模板繼承,詳細看模板繼承
comment
多行注解,忽略、不輸出{% comment %}{% endcommit %}標簽里面的內容
csrf_token
防止跨站點攻擊,在表單<form>標簽中添加{%csrf_token%}
cycle
用于循環產生字段
{% for o in some_list %}
{% cycle 'one' 'two' %}<br/>
{% endfor %}
這將會在for循環中交替出現row1和row2字符串
結果為(some_list的長度為5):
one
two
one
two
one
cycle的參數可以為字符串或者為變量
{% cycle 'one' 'two' as str %}->{{str}}
可以在循環中多次引用字符串
結果為:
one->one
two->two
one->one
two->two
one->one
debug
輸出整個調試信息負載,包括當前上下文和導入的模塊
extends
與block標簽配合使用
filter
{% filter upper|lower %}
this is text
{% endfilter %}
將filter標簽里面的經過upper處理在將結果經過lower處理,filter參數可選擇多個
firstof
輸出第一個不是False的參數
{% firstof var1 var2 var3 %}
等同于
{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% elif var3 %}
{{ var3 }}
{% endif %}
{% firstof var1 var2 var3 "fallback value" %}
當所有參數都為False時,輸出"fallback value"
此標簽自動轉義默認值參數:
{% autoescape off %}
{% firstof var1 var2 var3 "<strong>fallback value</strong>" %}
{% endautoescape %}
可以使用safe管道符忽略轉義:
{% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %}
可以用一下語法將輸出值儲存在變量value中:
{% firstof var1 var2 var3 as value %}
for
點運算符:
variable.object
優先返回
varialbe['object'] #字典類型查找
variable.object #屬性查找
variable.object() #方法調用
variable[object] #列表索引查找
for循環設置中可用的變量
forloop.counter 循環的當前迭代(1索引)
forloop.counter0 循環的當前迭代(0索引)
forloop.revcounter 循環結束時的迭代次數(1索引)
forloop.revcounter0 循環結束時的迭代次數(0索引)
forloop.first 如果這是第一次迭代,則為真
forloop.last 如果這是最后一次迭代,則為真
forloop.parentloop 對于嵌套循環,這是上一循環的forloop對象
for....empty
配合for標簽使用
{% for number in numbers %}
number
{% empty %} #numbers對象為空時執行
the numbers is empty
{% endfor %}
if
條件判斷語句
{% if athlete_list %}
one
{% elif athlete_in_locker_room_list %}
two
{% else %}
three
{% endif %}
在if標簽中可以使用布爾運算符or and not等
在同一標簽中同時使用and 和or時and的優先級將大于or
{% if athlete_list and coach_list or cheerleader_list %}
等于
if (athlete_list and coach_list) or cheerleader_list
if標簽也可以用運算符 == != < > <= >= in is
{% if a > b and b > c %}
也可以在if標簽中使用過濾器
{% if messages|length >= 100 %}
You have lots of messages today!
{% endif %}
ifchanged
{% for t in text %}
{% ifchanged %}{{ t }}{% endifchanged %} #當t的內容與上次重復時,不顯示出來
{%endfor%}
#也可以指定判斷某個變量
{% ifchanged date.date %} {{ date.date }} {% endifchanged %}
#也可以添加{% else %}標簽
{% ifchanged match.ballot_id %}
some
{% else %}
some
{% endifchanged %}
include
加載一個模板并且用當前的上下文內容渲染它。這標簽能用來在一個模板中包含另一個模板,模板的名字可以是一個變量或者是字符串。
{% include "foo/bar.html" %}
模板名是相對于模板加載器的根目錄的。字符串參數可以用./或者../開頭。
此標簽的參數也可以指定一個擁有render()方法渲染內容的Template對象。
#也可以在標簽中用with指定參數
{% include "name_snippet.html" with person="Jane" greeting="Hello" %}
#可以指定字段only來指定只接受include內的參數來渲染
{% include "name_snippet.html" with greeting="Hi" only %}
load
用于裝載自定義的標簽或者過濾器的庫
lorem
用法:
{% lorem [count] [method] [random] %}
count:用來指定要生成的段落或者單詞的數目(默認為1)
method:w代表單詞,p代表html段落,b代表純文本段落
用來生成測試文本
now
用于格式化顯示時間
It is {% now "jS F Y H:i" %} #可以使用反斜杠\進行轉義
#也可以將輸出的字符串作為變量儲存下來
{% now "Y" as current_year %}
regroup
?
resetcycle
重置cycle的計數
#也可以指定重置的cycle標簽
{% cycle 'one' 'two' as one %}
{% cycle 'one' 'two' as two %}
{% resetcycle one %}
spaceless
清除html標簽直接的空白符號(只刪除標簽之間的,標簽和文本之間的不刪除)
{% spaceless %}
<p>
<a href="foo/">Foo</a>
</p>
{% endspaceless %}
templatetag
用法:
{% templatetag param %}
將參數進行轉義
param:
openblock ----> {%
closeblock ----> %}
openvariable ----> {{
closevariable ----> }}
openbrace----> {
closebrace----> }
opencomment----> {#
closecomment----> #}
url
用給定的名稱和可選參數返回結對路徑引用,任何特殊的字符都將會用iri_to_uri()編碼。
語法:
{% url 'some-url-name' v1 v2 %}
#第一個參數是url的name,它可以是字符串或者變量
#額外的參數是可選的,將用作為url上的參數
#也可以使用關鍵詞參數,但位置參數和關鍵詞參數不要混合使用
{% url 'some-url-name' arg1=v1 arg2=v2 %}
如果指定的url不存在,則將會拋出一個NoReverseMatch錯誤,這將導致服務器返回一個錯誤頁面。
#一下調用將不會直接生成url,而是會保存在變量the_url中
{% url 'some-url-name' arg arg2 as the_url %}
#可以使用標簽{% block %}限定變量the_url作用的范圍
verbatim
停止模板渲染引擎呈現此塊標記的內容。
widthratio
按照比例計算數值
{% widthratio this_value max_value max_width %}
#可以使用as儲存數值
with
簡化復雜的變量調用
{% with total=business.employees.count %}
#這里可以直接使用total,total的作用域只存在標簽體中
{% endwith %}
#可以指定更多的參數
{% with alpha=1 beta=2 %}
...
{% endwith %}
過濾器:
內置過濾器:django.template.defaultfilters
過濾器改變變量的值和改變標簽的參數
語法:
{{ django|title }} #將變量django內容里面的每個單詞首字符轉換為大寫
可以向過濾器傳遞參數:
{{ my_date|date:"Y-m-d" }}
內建的過濾器:
add
#將參數加載變量value上
{{ value|add:"2" }}
#變量和參數也可以是其它的類型(例如string list)
addslashes
轉義
{{ value|addslashes }}
#如果value是:I'm using Django
將輸出:I\'m using Django
capfirst
將值的第一個字母大寫
center
{{ value|center:"15" }}
#將value居中在寬度為15
cut
{{ value|cut:param }}
#將value中的全部param去掉
date
按照給定的格式去格式化日期
詳細
default
當值為False時,則輸出默認參數
#如果值value為False,則輸出nothing
{{ value|default:"nothing" }}
default_if_none
和default類似,不過僅在值為None時才輸出默認值
dictsort
將列表中的字典按照給定的參數作為字段進行排序
[
{'name': 'zed', 'age': 19},
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
]
參數為name
則輸出:
[
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
{'name': 'zed', 'age': 19},
]
或者是:
{{ value|dictsort:0 }} #參數應該輸入int類型,而不是字符串類型
value:
[
('a', '42'),
('c', 'string'),
('b', 'foo'),
]
排序后:
[
('a', '42'),
('b', 'foo'),
('c', 'string'),
]
dictsortreversed
工作原理和上面一樣,不過是倒序排序
divisibleby
#如果value能被參數'3'整除,則輸出True,否則輸出False
{{ value|divisibleby:"3" }}
escape
轉義,在html中輸出html標簽的字符串表達
escapejs
??
filesizeformat
{{ value|filesizeformat }} #將value轉換為有利于理解的文件大小字符串表示
first
返回列表中的第一個元素
{{ value|first }}
floatformat
如果不帶參數,則四舍五入到小數點后一位
如果帶參數,則四舍五入保留參數大小的小數個數(n為參數大小)
如果參數為零,則不保留小數
如果參數為負數,則四舍五入保留參數絕對值大小的小數個數,如果小數點后全為零,則忽略小數
force_escape
類似于escape,此過濾器立即應用并返回一個新的轉義字符串
get_digit
給定一個整數,返回請求的數字
{{ value|get_digit:"2" }}
#返回value的十位數字
#若參數為3,則返回百位數字
iriencode
將value轉換為適合包含在URL中的字符串表達形式
join
用給定的字符串連接列表,返回最終字符串表達形式
類似python的str.join(list)
json_script
New in Django 2.1
安全地將Python對象輸出為JSON,包裝在<script>標記中,以便與JavaScript一起使用。
{{ value|json_script:"hello-data" }}
#如果value為{'hello': 'world'}
#則輸出:
<script id="hello-data" type="application/json">{"hello": "world"}</script>
last
返回列表中最后的元素
{{ value|last }}
length
返回序列對象的長度,對于未知類型,則返回0
length_is
如果給定序列的長度等于傳入的參數,則返回True,否則返回False
linebreaks
將換行符轉換為<br>
一個新行加上一個空行變成了段落換行符</p>
linebreaksbr
將換行符轉換為<br>
linenumbers
顯示文本的行數
one
two
three
轉換為:
1. one
2. two
3. three
ljust
{{ value|ljust:"10" }}
#如果value是django,則輸出 "Django "
lower
將給定的字符串全部轉換為小寫字符
make_list
將給定的字符串轉換為列表
phone2numeric
將電話號碼轉換成數字輸出
pluralize
應用于英文復數場景,參數可以定義輸出的后綴
pprint
調試用??
random
隨機輸出給定的列表中的元素
{{ value|random }}
#如果value是['a','b','c'],則隨機輸出其中的一個
rjust
類似于ljust,不過對齊方式是向右
safe
標記內容,表示不用被轉義
safeseq
類似于safe,但應用于列表中的每個參數
slice
給定一個列表,返回列表的切片對象
slugify
轉換為ASCII。將空格轉換為連字符。刪除非字母數字、下劃線或連字符的字符。轉換為小寫的。還可以去掉開頭和結尾的空白。
"Joel is a slug" 轉換為 "joel-is-a-slug"
stringformat
根據給定的參數格式化變量
{{ value|stringformat:"E" }}
#如果value為10,則輸出1.000000E+01
striptags
將給定的字符串中的html的全部標簽刪除
time
格式化時間
{{ value|time:"H:i" }} #value為時間
timesince
{{ start|timesince:later }}
#代表自從start之后,到later過了多少時間
#相當于返回later-start
timeuntil
{{ start|timeuntil:before }}
#before為可選參數,代表在start之間的時間
#返回從bofore到start過了多少時間(start-before)
title
將給定的字符串中所有的單詞的首字母轉換為大寫,其它字符轉換為小寫
truncatechars
縮短字符串長度為給定的參數,縮短后字符串帶...后綴
{{ value|truncatechars:9 }}
#value="Joel is a slug"
#輸出"Joel i..."
truncatechars_html
類似truncatechars,但忽略html標簽,將標簽里面的內容自動縮短。
{{ value|truncatechars_html:9 }}
#value="<p>Joel is a slug</p>"
#輸出"<p>Joel i...</p>"
truncatewords
類似truncatechars,但以一個單詞為單位計算。
truncatewords_html
類似truncatechars_html,但以一個單詞為單位計算。
unordered_list
根據給定的嵌套的list自動生成嵌套的列表
upper
將給定的字符串中的字母全部轉換為大寫字母
urlencode
轉義URL中使用的值
urlize
將給定的url地址轉換為html中可點擊的鏈接
urlizetrunc
類似于urlize和truncatechars的結合體
wordcount
返回給定字符串中單詞的數量
wordwrap
指定每行的長度
{{ value|wordwrap:5 }}
#如果value為"Joel is a slug"
#則輸出
Joel
is a
slug
yesno
將給定值的布爾值轉換為自定義的參數
{{ value|yesno:"yeah,no,maybe" }}
#如果value為True,則輸出yeah
#如果為False,則輸出no
#如果為None,則輸出maybe(此參數可省略,如果省略,則默認輸出False對應的結果)
文我們以經典ERP管理軟件——浪潮PS cloud管理軟件為例,對po文件翻譯進行簡單的說明。
1) 有些特殊的內容要保持原文:
#. module: base
#: model:ir.model,name:base.model_res_config_installer
msgid "res.config.installer"
msgstr "res.config.installer"
2) 帶格式的條目,保持原格式:
包含幾種情況:
第 1 種:
#. module: base
#: view:res.lang:0
msgid "%B - Full month name."
msgstr "%B - 月份全稱"
凡是 msgid 內容中包含'%'這種格式的,對于后面的單詞,一般不翻譯。
#. module: base
#: model:ir.actions.act_window,help:base.action_partner_supplier_form
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Click to add a contact in your address book.\n"
" </p><p>\n"
" OpenERP helps you easily track all activities related to\n"
" a supplier: discussions, history of purchases,\n"
" documents, etc.\n"
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 點擊在地址簿里增加一條聯系信息.\n"
" </p><p>\n"
" OpenERP 幫助你很容易跟蹤跟供應商關聯的所有活動:\n"
" 會談,采購歷史清單,\n"
" 單據, 等等.\n"
" </p>\n"
" "
原文中的 HTML 標記,如“<p class=\"oe_view_nocontent_create\">”、“</p>”保持不動。原文中的“\n”換行符保持不動。
{} 包含的是 JS 代碼,無需翻譯;
[] 包含的是 domain,無需翻譯;
原文里面包含的 html 標簽,必須原樣保留,無需翻譯。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。