2017年1月5日 星期四

[Django]靜態文件設置

如果想要讓Django網站上的圖片顯示出來,最正規的方法
1.修改urls.py


from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$',homepage),
    url(r'^post/(\w+)$',showpost),
]+static(settings.STATIC_URL, document_root=settings.STATIC_URL)

#讓django可以偵測網址結尾為http://127.0.0.1/static/..........

2.修改settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static/images'),
]

STATIC_ROOT = os.path.join(BASE_DIR,'staticfiles')

#STATIC_URL 讓 templates 裡的網址不會寫死
#STATICFILES_DIRS 執行collectstatic 時django會去這些資料夾收集檔案
#STATIC_ROOT 執行collectstatic django會把檔案集中到此目錄

3.模板渲染的修改
{% load staticfiles %}
<img src="{% static " swift.jpg="" />

4.執行python manage.py collectstatic

http://www.jianshu.com/p/a3fb31f49f2e
http://eric0806.blogspot.tw/2014/04/blogger-google-code-prettify.html
https://docs.djangoproject.com/en/1.10/howto/static-files/

2017年1月3日 星期二

[Python]1.9.3 綴星運算式 1.9.4 函數的有效範圍

若 lst = [1 , 2 , 3 , 4 ]
def add(a,b,c,d):
      return a+b+c+d
add(*lst) = add(lst[0],lst[1],lst[2],lst[3]) = add(1,2,3,4)=sum(lst)

Python 沒有多載(overload)

多載:允許相同名字的函數存在,只是他們的參數數量不同
比方說,我們今天要寫一個函式
在java 或是C++中,我們可以
def add(a,b):
    return a+b
def add(a,b,c):
    return a+b+c

add(1,2) >>>3
add(1,2,3) >>>6

透過add 參數的不同來分辨呼叫的函式

Python 裡面沒有這種方法,我們可以透過清單
def add(lst):
    return sum(lst)

還有另一種方法
def add(*tmp):
    return sum(tmp)

在這裡位於參數列的*tmp會將所有傳入的元素收集成元組

對於字典的呼叫我們可以使用**雙綴星號的方式
def power (base,exp):
    return base**exp

dic = {'base':2,'exp':3}
print power(**dic)

**dic 會將dic 拆解成 base = 2,exp = 3)

定義函式上也可以使用
def power(**dic):
    return dic['base'] ** dic['exp']

print power(base=2,exp=3)





2016年12月22日 星期四

[sublime]安裝中遇到的問題

anaconda的安裝
anaconda使用後會出現一些白框框住程式碼
How to fix:
Sublime > Preferences >Package >Anaconda >Settings User
會出現一個空白文件,加上{"anaconda_linting":false}即可

2016年12月20日 星期二

[Python]1.9.2 自定義函式

def 函式名稱(參數1, 參數2........):
      若干運算(敘述)
       return 回傳值1, 回傳值2......

 可以沒有回傳值

 def power(base,exp):
       return base**exp

函式的呼叫
power(2,3)
power(exp=3,base=2)

遞迴
如果我們今天有一個清單

lst = [1,2,[1,2,3],2,4,5,[23,12],[12,23,34,67]]

def print_list(lst):
 for item in lst:
  if isinstance(item,list):
   print_list(item)
  else:
   print item,

#isinstance(item,型態)這個方法就是問
#請問item是這個型態嗎?

#這邊要注意,運用遞回的方法把每一層的list剝開
print_list(lst)
執行結果 >>>1 2 1 2 3 2 4 5 23 12 12 23 34 67


參數的預設值
def add(a,b=1):
      return a+b

注意:帶有預設值的參數都需擺在沒有預設值的後面,
            位置呼叫時無法指定哪一些參數用預設值


2016年12月19日 星期一

[Python]1.9.1 內建函式

1.9.1 內建函式
內建函式的paper

工廠函式:專門負責型態或是製造資料
for example:
int('99') -------------99
float('1.73')----------1.73
bool('')---------------False
str(20)----------------'20'
list((1,2,3))----------[1,2,3]
list(set([1,1,2,2])----[1,2]























全部或任何
“對於所有”(for all) “存在一個” (exist) 在邏輯上是個很重要的概念
member = {'jack':90,'jerry':85,'jimmy':43,'Wang':9,'LI':23}
a = {}
for name,grade in member.items():
    
    if grade>60:
        a[name]=True
    else:
        a[name]=False
            
if all(a.values()):
    print "Everyone pass the test"
else:
    print "someone did not pass the test"
    for name,ch in a.items():
        if ch == False:
            print name
#這裡要注意的是dic資料的取用,用for 方法
#a.items()
#a.keys()
#a.values()




執行結果





















分析
all():會對list裡面的所有元素進行檢查,若全部元素為真,傳回True,否則傳回False
另一個函數any()則是只要一個人為真,就傳回真了

最大與最小
max(lst)
min(lst)

產生連續的整數
range(10)-----------[0,1,2,3,4,5,6,7,8,9]
range(2,7)----------[2,3,4,5,6]
range(2,13,3)-------[2,5,8,11]

群集的長度
>>>lst = [1,2,3,4,5]
>>>print len(lst)
>>>5
>>>dic = {1:2,2:2,3:2}
>>>print len(dic)
>>>5







[Python]1.8 例外

動態語言中,除了語法錯誤造成的Syntax Error以外,幾乎所有的錯誤都來自執行期的錯誤.像是TypeError或是NameError等等.當錯誤發生時,Python會產生Traceback,方便檢視錯誤的來源. 但是在開發時,重要的不是辨識每一個錯誤而是排除掉一些不是錯誤的錯誤,例外. 舉個例子:
#有個檔案test_file.txt

3 4
1 3

20 19
%%%
88 7
1 2 3 
0
#使用try except 敘述來避開中間%%%的例外
f = open('/Users/lijack/Desktop/test_file.txt')
for lines in f:
    try:
        a , b = lines.strip().split()
        print "{:>2} + {:>2} ={:>3}".format(a,b,int(a)+int(b))
        
    except:
        pass
#python 不允許有suite是空白的
    
    
f.close


#strip()函數會移除字串頭尾指定的符號
string = "     12342342314213     "
print string.strip()

string1 = "8888888dfasfsdfsdafasdf888888"
print string1.strip('8')

#split函數:用特定字符切割字串
string2 = "hello world jack"
a,b,c = string2.split()
print a
print b
print c



















分析:如果沒有用try - except 敘述時,有幾行( %%%, 1 2 3)沒有符合兩個數字的形式,便會出現ValueError.如果用if -else 敘述時,會出現很多種複雜的狀況.但其實我們並不需要去處理跟我們需要不相關的事.

執行:我們先執行try的程式碼,當發生錯誤時,立刻停止try,進入except 執行suite 裡的程式碼(ex: pass),在這題等於我們略過了所有不符合規格的行.