qaz482的django學習日誌
2017年4月8日 星期六
2017年1月5日 星期四
[Django]靜態文件設置
如果想要讓Django網站上的圖片顯示出來,最正規的方法
1.修改urls.py
2.修改settings.py
3.模板渲染的修改
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/
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)
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}即可
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)
遞迴
如果我們今天有一個清單
參數的預設值
def add(a,b=1):
return a+b
注意:帶有預設值的參數都需擺在沒有預設值的後面,
位置呼叫時無法指定哪一些參數用預設值
若干運算(敘述)
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) 在邏輯上是個很重要的概念
內建函式的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,方便檢視錯誤的來源.
但是在開發時,重要的不是辨識每一個錯誤而是排除掉一些不是錯誤的錯誤,例外.
舉個例子:

分析:如果沒有用try - except 敘述時,有幾行( %%%, 1 2 3)沒有符合兩個數字的形式,便會出現ValueError.如果用if -else 敘述時,會出現很多種複雜的狀況.但其實我們並不需要去處理跟我們需要不相關的事.
執行:我們先執行try的程式碼,當發生錯誤時,立刻停止try,進入except 執行suite 裡的程式碼(ex: pass),在這題等於我們略過了所有不符合規格的行.
#有個檔案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),在這題等於我們略過了所有不符合規格的行.
訂閱:
文章 (Atom)

