1. 程式人生 > >django專案所遇問題總結

django專案所遇問題總結

2. 關於設定static靜態檔案,樣式失效問題

原因: 可能開啟多個埠號,頁面顯示訪問的不是已經設定了static的模板,所以,樣式沒有顯示

 

3. models模型中gender欄位的選擇設定

choice = [
(1, ''),
(2, '')
]
gender = models.PositiveSmallIntegerField(default=1, choices=choice)

如圖,當使用1,2來代替男,女在資料庫中的顯示,在模型中寫法如上,需要注意:數字1,2不加引號,否則在HTML頁面使用get_gender_display,則無法顯示出你想要的可讀性語言,‘男’, ‘女’

 

4. 當模型層使用CharField, form 正則出錯

原因widget 更改input在前端的樣式,樣式是固定的幾種,所以,寫正則出錯

 

5. 檔案上傳 與form表單is_valid()判斷問題

當上傳相同檔案時,需找到上一個上傳檔案的路徑,然後通過路徑獲取它並刪掉,再把當前的檔案上傳,如下:

ins = Duck.objects.get(pk=1)
form = UploadDuckForm(request.POST, request.FILES, instance=ins)
file_path = str(ins.photo)     #
--> ins.photo 獲取的是圖片檔案物件,需轉化為字串 if form.is_valid(): # file_path = str(ins.photo) ---> 錯誤寫法 full_path = settings.MEDIA_ROOT + file_path if os.path.exists(full_path): os.remove(full_path) form.save()

通過instance獲取之前的資料,
photo儲存上傳的圖片路徑, 如: 20181018/5.jpg
所遇問題
  當進行is_valid()判斷表單資料合法後,通過ins.photo獲取的路徑只有圖片名稱 ”5.jpg“,並沒有上一級的上傳時間
原因


  未知,解決措施,如圖,查詢路徑ins.photo放在form.is_valid()之前

 

6. js , jq 轉換問題

原生dom獲取,document.getElementById('#a')
jq獲取, $('#a')
注意:
  jq轉換成原生DOM,則通過 $('#a')[0] 更改
  然後如果獲取元素的id,
  

<tr id="{{ fish.id }}">
獲取id $('#a')[0].id

  則需注意,屬性是元素dom所有,而jq沒有,所以此時就需要上面所提到的相互轉換,而jq獲取id的值,則可以參考以下寫法

$('#a').attr('id')

 

8. session 學習

session 是一個物件,一直都存在,清除時,只是清除了裡面的鍵與值

  • 獲取一條資料,沒有則設為False
  • username = request.session.get('user', False)
  • 刪除指定資料 del request.session['key']
  • 刪除所有,鍵和值一起清空 request.session.flush()
  • 刪除所有,只清空值 request.session.clear()
  • 注意: session中存入的是字串,所以,如file儲存在模型中,取出存入session時,需轉化 str(user.photo)

 

10. 關於ajax

在純js頁面寫ajax時,url 地址為顯示的路徑:如
HTTP://127.0.0.1:8000/。。。

 

12.  a標籤

  • 行內標籤最好不要巢狀塊級元素,規定
  • 特殊需求時,如點選文章進入頁面,此時新增a標籤包裹塊級元素div時,需要注意,內部不可再新增a標籤,否則a標籤則為單獨出來

 

13.  order_by() 排序

Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')

"-pub_date" 前面的負號"-"表示降序排序。預設是採用升序排序。要隨機排序,就使用 "?"

 

14. 不同語言物件獲取問題

  • 在HTML頁面寫ajax時,url 採用 django的路由寫法, 如  
   {% url 'news:di_vote' a%}

    此時js中 var a = $('.a').html(),來獲取a,則出錯!
    原因
    兩者語言不同,獲取的不在一個地方,所有無法呼叫,這種寫法是認知錯誤!!!
    {%%} {{ }} 模板裡的引數,需要從view檢視函式render中返回的才有效

  • get請求時,url後面拼引數,需要加上?