views.py
做水印需要安裝PIL模塊,windows的有.exe的文件http://www.pythonware.com/products/pil/index.htm#pil116這只是其中一個,應該還有其他的。
from PIL import Image, ImageEnhance
LEFT_TOP = 'lt'
LEFT_BOTTOM = 'lb'
django網站模板下載?RIGHT_TOP = 'rt'
RIGHT_BOTTOM = 'rb'
WIDTH_GRID = 30.0
HIGHT_GRID = 30.0
#水印的位置?
django-idcops? def mark_layout(im, mark, layout=RIGHT_BOTTOM):
??? im_width, im_hight = im.size[0], im.size[1] ???
?? ?mark_width, mark_hight = mark.size[0], mark.size[1]
??? coordinates = { LEFT_TOP: (int(im_width/WIDTH_GRID),int(im_hight/HIGHT_GRID)), ?????????????
??????????????????? ?????? LEFT_BOTTOM: (int(im_width/WIDTH_GRID), int(im_hight - mark_hight - im_hight/HIGHT_GRID)), ???????????????????
django源碼、????????????????????????? ?RIGHT_TOP: (int(im_width - mark_width - im_width/WIDTH_GRID), int(im_hight/HIGHT_GRID)), ???????????
????????????????? ???????? RIGHT_BOTTOM: (int(im_width - mark_width - im_width/WIDTH_GRID), ????????????????
?????????????????????? ??? int(im_hight - mark_hight - im_hight/HIGHT_GRID)), ????????????????? } ??? return coordinates[layout]
#水印的圖片
def reduce_opacity(mark, opacity): ??
django template,? ? assert opacity >= 0 and opacity <= 1 ???
?? ?mark = mark.convert('RGBA') if mark.mode != 'RGBA' else mark.copy() ??
? ? alpha = mark.split()[3] ???
?? ?alpha = ImageEnhance.Brightness(alpha).enhance(opacity) ???
??? mark.putalpha(alpha) ???
Django Unchained、??? return mark
def water_mark(img_data, opacity=1): ??
? img = Image.open(img_data) ???
??mark = Image.open(os.path.normpath(os.path.join(os.path.dirname(__file__),"../../"))+'/static/Manager/images/watermark.png') # 水印文件可以使用指定路徑
? if opacity < 1: ??????
django mvc。? ? mark = reduce_opacity(mark, opacity)???
? if img.mode != 'RGBA': ??????
? ? img = img.convert('RGBA') ???????
?? ?img_format = 'JPEG' ???
? else: ???????
django modelform,??? ?img_format = 'PNG'?????
? layer = Image.new('RGBA', img.size, (0,0,0,0))???
? layer.paste(mark, mark_layout(img, mark))????
??img = Image.composite(layer, img, layer) ???
??return img
django bootstrap、調用的地方:water_mark(“圖片的路徑”).save(“圖片的路徑”, quality=100)
改圖的大小:
img = Image.open(“圖片的路徑”)
width,height=img.size
new_img1 = img.resize((int(width*0.5), int(height*0.5)),Image.BILINEAR)#按照50%縮小
django form?new_img2 = img.resize((130,int((float(height)/width)*130)),Image.BILINEAR)#小圖的比例
時間格式化:
import datetime
datetime.datetime.now().strftime("%Y%m%d%H%M%S")
[轉]django?過濾器?、日期格式化參數
過濾器相關:
django vue,一、形式:小寫 {{?name?|?lower?}}
二、串聯:先轉義文本到HTML,再轉換每行到?<p>?標簽 {{?my_text|escape|linebreaks?}}
三、過濾器的參數 顯示前30個字 {{?bio?|?truncatewords:"30"?}}
格式化 {{?pub_date?|?date:"F?j,?Y"?}}
過濾器列表 {{?123|add:"5"?}}?給value加上一個數值
{{?"AB'CD"|addslashes?}}?單引號加上轉義號,一般用于輸出到javascript中
{{?"abcd"|capfirst?}}?第一個字母大寫
{{?"abcd"|center:"50"?}}?輸出指定長度的字符串,并把值對中
{{?"123spam456spam789"|cut:"spam"?}}?查找刪除指定字符串
{{?value|date:"F?j,?Y"?}}?格式化日期
{{?value|default:"(N/A)"?}}?值不存在,使用指定值
{{?value|default_if_none:"(N/A)"?}}?值是None,使用指定值
{{?列表變量|dictsort:"數字"?}}?排序從小到大
{{?列表變量|dictsortreversed:"數字"?}}?排序從大到小
{%?if?92|divisibleby:"2"?%}?判斷是否整除指定數字
{{?string|escape?}}?轉換為html實體
{{?21984124|filesizeformat?}}?以1024為基數,計算最大值,保留1位小數,增加可讀性
{{?list|first?}}?返回列表第一個元素
{{?"ik23hr&jqwh"|fix_ampersands?}}?&轉為&
{{?13.414121241|floatformat?}}?保留1位小數,可為負數,幾種形式
{{?13.414121241|floatformat:"2"?}}?保留2位小數
{{?23456?|get_digit:"1"?}}?從個位數開始截取指定位置的1個數字
{{?list|join:",?"?}}?用指定分隔符連接列表
{{?list|length?}}?返回列表個數
{%?if?列表|length_is:"3"?%}?列表個數是否指定數值
{{?"ABCD"|linebreaks?}}?用新行用<p>?、?<br?/>?標記包裹
{{?"ABCD"|linebreaksbr?}}?用新行用<br?/>?標記包裹
{{?變量|linenumbers?}}?為變量中每一行加上行號
{{?"abcd"|ljust:"50"?}}?把字符串在指定寬度中對左,其它用空格填充
{{?"ABCD"|lower?}}?小寫
{%?for?i?in?"1abc1"|make_list?%}ABCDE,
{%?endfor?%}?把字符串或數字的字符個數作為一個列表
{{?"abcdefghijklmnopqrstuvwxyz"|phone2numeric?}}?把字符轉為可以對應的數字??
{{?列表或數字|pluralize?}}?單詞的復數形式,如列表字符串個數大于1,返回s,否則返回空串
{{?列表或數字|pluralize:"es"?}}?指定es
{{?列表或數字|pluralize:"y,ies"?}}?指定ies替換為y
{{?object|pprint?}}?顯示一個對象的值
{{?列表|random?}}?返回列表的隨機一項
{{?string|removetags:"br?p?div"?}}?刪除字符串中指定html標記
{{?string|rjust:"50"?}}?把字符串在指定寬度中對右,其它用空格填充
{{?列表|slice:":2"?}}?切片
{{?string|slugify?}}?字符串中留下減號和下劃線,其它符號刪除,空格用減號替換
{{?3|stringformat:"02i"?}}?字符串格式,使用Python的字符串格式語法
{{?"E<A>A</A>B<C>C</C>D"|striptags?}}?剝去[X]HTML語法標記
{{?時間變量|time:"P"?}}?日期的時間部分格式
{{?datetime|timesince?}}?給定日期到現在過去了多少時間
{{?datetime|timesince:"other_datetime"?}}?兩日期間過去了多少時間
{{?datetime|timeuntil?}}?給定日期到現在過去了多少時間,與上面的區別在于2日期的前后位置。
{{?datetime|timeuntil:"other_datetime"?}}?兩日期間過去了多少時間
{{?"abdsadf"|title?}}?首字母大寫
{{?"A?B?C?D?E?F"|truncatewords:"3"?}}?截取指定個數的單詞
{{?"<a>1<a>1<a>1</a></a></a>22<a>1</a>"|truncatewords_html:"2"?}}?截取指定個數的html標記,并補完整 <ul>
{{?list|unordered_list?}}</ul>?多重嵌套列表展現為html的無序列表
{{?string|upper?}}?全部大寫
<a?href="{{?link|urlencode?}}">linkage</a>?url編碼
{{?string|urlize?}}?將URLs由純文本變為可點擊的鏈接。(沒有實驗成功)
{{?string|urlizetrunc:"30"?}}?同上,多個截取字符數。(同樣沒有實驗成功)
{{?"B?C?D?E?F"|wordcount?}}?單詞數
{{?"a?b?c?d?e?f?g?h?i?j?k"|wordwrap:"5"?}}?每指定數量的字符就插入回車符
{{?boolean|yesno:"Yes,No,Perhaps"?}}?對三種值的返回字符串,對應是?非空,空,None
?
日期格式化參數:
a?'a.m.'?或?'p.m.'?(注意,它與PHP?的輸出略有不同.它包括了句點(django擴展).?
'a.m.'? A?'AM'?或?'PM'.?'AM'? B?未實現.??
d?每月第幾天,?帶前導零?'01'?to?'31'
?D?每周第幾天,3字母的字符串.?
'Fri'? f?時間,?12-小時制的小時和分鐘數,?如果分鐘數為零,則不顯示.(django?擴展).?
'1',?'1:30'? F?月份,?長文本格式.?
'January'? g?小時,?12-小時制,沒有前導零?'1'?to?'12'?
G?小時,?24-小時制,沒有前導零?'0'?to?'23'?
h?小時,?12-小時制,有前導零?'01'?to?'12'?
H?小時,?24-小時制,有前導零?'00'?to?'23'?
i?分鐘.?'00'?to?'59'?
I?未實現???
j?每月第幾天,?無前導零?'1'?to?'31'?
l?每周第幾天,長文本格式.?'Friday'?
L?是否閏年.?True?or?False?
m?數字表示的月份,有前導零.?'01'?to?'12'?
M?月份,3字母短文本格式.?'Jan'?
n?數字表示的月份,無前導零?'1'?to?'12'?
N?出版風格的月份縮寫(django?擴展)?'Jan.',?'Feb.',?'March',?'May'?
O?與格林威治的時間差(以小時計)?'+0200'?
P?12小時制的小時分鐘及'a.m.'/'p.m.'?分鐘數若為零則不顯示.?用字符串表示特殊?的時間點,?如?'midnight'?和?'noon'?(django擴展)?'1?a.m.',?'1:30?p.m.',?'midnight','noon',?'12:30?p.m.'?
r?RFC?822?格式的日期?.?'Thu,?21?Dec?2000?16:01:07+0200'?
s?秒數,?帶有前導零的數字表示?'00'?to?'59'?
S?英語序數后綴,用于一個月的第幾天,2個字符?'st',?'nd',?'rd'?or?'th'? t?給定月共有多少天.?28?to?31?
T?本機時區.?'EST',?'MDT'?
U?未實現???
w?一周中的第幾天,沒有前導零的數字?'0'?(Sunday)?to?'6'?(Saturday)?
W?ISO-8601?一年的第多少星期數,?一周從?星期一開始?1,?23?
y?Year,?2?位數字表示?'99'?
Y?Year,?4?位數字表示?'1999'? z?一年中的第幾天?.?0?to?365?
Z?以秒計的時區偏移量.?這個偏移量對UTC西部?時區總是負數,而對UTC東部時區則總是正數?-43200?to?43200
時間睡眠:
import time
time.sleep(0.001)#括號內的時間單位為秒
靜態路徑的設置方法:
setting.py
STATIC_URL = '/static/'
STATICFILES_DIRS = ( 'static' )
url.py
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
?????????????????????????? {'document_root': settings.STATICFILES_DIRS}, name="static"),
url(r'^upload/(?P<path>.*)$', 'django.views.static.serve', {'document_root': "upload"}, name="upload"),靜態的上傳文件的路徑
?