星期六, 3月 18, 2017

Constraint Layout v1 筆記

星期六, 3月 04, 2017




就在2017年,Linode 終於推出每月5塊美金的伺服器了。之前一直想租這等級的機器,等了兩三年,想必是市場殺紅了,Linode 也只好出這等級的服務。若每月預算只有 5 塊美金預算的人,之前有DigitalOcean,現在有多了一個老牌的伺服器營運商供選擇。

降低 Linode 資費方案三大步驟:
1.shutdown 關機


2.Resize -> 選擇要降級的方案 『 Linode 1024 』
3.Boot 開機
PS:若擔心百萬筆會員資料遺失,務必做好備份與通知會員為了更好的服務品質,伺服器將在X年X月X日,X時X分,進行升級維護。
降級方案一定要注意的是目前資料量,可適用 Linode 1024 方案大小,若未來不夠可以在進行升級。
Linode 1024 方案,每月五塊美金,1G Ram / 20G SSD / 1 TB 傳輸量


我的推薦優惠碼:69c64e8ff7b848a24049359fbec570ed1574046b

更多 Linode 方案介紹訊息:
https://www.linode.com/?r=69c64e8ff7b848a24049359fbec570ed1574046b

#DigitalOcean
#Linode
#Server

Linode 升級/降級 資費方案方法教學

星期日, 2月 26, 2017

本節主要講Django模板中的循環,條件判斷,常用的標籤,過濾器的使用。
  1. 列表,字典,類別的實例的使用
  2. 循環:迭代顯示列表,字典等中的內容
  3. 條件判斷
    判斷是否顯示該內容,比如判斷是手機訪問,還是電腦訪問,給出不一樣的代碼。
  4. 標籤
    for,if這樣的功能都是標籤。
  5. 過濾器
    管道符號後面的功能,比如{{ var | length }},求變量長度的length就是一個過濾器。

實例一,字串

# -*- coding: utf-8 -*-
from django.shortcuts import render
 
 
def home(request):
    mystr = u"哈囉"
    return render(request, 'home.html', {'mystr': mystr})
在視圖中我們傳遞了一個字符串名稱是string 到模板home.html,在模板中這樣使用它:
home.html
{{ mystr }}

實例二,List

def home (request):
  ClassList=["Java","PHP","Python","Django"]
  return render(request,'home.html',{'ClassList':ClassList})
home.html
列表:
{% for i in ClassList %}
{{ i }}
{% endfor %}

小提示:

一般的變量之類的用 {{ }}(變量),
功能類的,比如循環,條件判斷是用 {% %}(標籤)

實例三,字典

def home(request):
    info_dict = {'site': u'KT Lollipop', 'content': u'線上開放式課程'}
    return render(request, 'home.html', {'info_dict': info_dict})
home.html
站點:{{ info_dict.site }} 内容:{{ info_dict.content }}
也可以這樣遍歷字典:
{% for key, value in info_dict.items %}
    {{ key }}: {{ value }}
{% endfor %}

實例四,更多 for 操作:

def home(request):
    # 0~99的 List
    List = map(str, range(100))
    return render(request, 'home.html', {'List': List})
結果:
遍歷到了最後一個逗點
所以加入forloop.last 判斷,最後一項不加入逗號
{% for item in List %}
    {{ item }}{% if not forloop.last %},{% endif %} 
{% endfor %}
for循環常用功能:
變量描述
forloop.counter索引從1 開始算
forloop.counter0索引從0 開始算
forloop.revcounter索引從最大長度到 1
forloop.revcounter0索引從最大長度到 0
forloop.first當遍歷的元素為第一項時為真
forloop.last當遍歷的元素為最後一項時為真 |
forloop.parentloop用在嵌套的for 循環中,獲取上一層for 循環的forloop

for 迴圈當列表為空值時用 empty

    {% for athlete in athlete_list %}
  • {{ athlete.name }}
  • {% empty %}
  • 資料為空
  • {% endfor %}

實例五,模板獲取 view 對應的網址:

def add(request, a, b):
    c = int(a) + int(b)
    return HttpResponse(str(c))
urlpatterns = patterns('',
    url(r'^add/(\d+)/(\d+)/$', 'app.views.add', name='add'),
)
template html
{% url 'add' 4 5 %}
這樣網址上就會顯示出:/add/4/5/ 這個網址,
假如我們以後修改 urls.py 中的
r'^add/(\d+)/(\d+)/$'
#改成
r'^ktshow/(\d+)/(\d+)/$'
網址則會變成/ktshow/4/5/

實例六,模板中的邏輯操作

{% if var >= 90 %}
成绩高於 90 分,評等:A
{% elif var >= 80 %}
成绩高於 80 分,評等:B
{% elif var >= 70 %}
成绩高於 70 分,評等:C
{% elif var >= 60 %}
成绩高於 60 分,評等:D
{% else %}
成绩低於 60 分,評等:F
{% endif %}
and, or, not, in, not in 也可以在模板中使用
{% if num <= 100 and num >= 0 %}
num 在0100之間
{% else %}
資料不在這之間
{% endif %}
判斷’XXXXXX’ 是否在一個列表變量 List 中:
{% if 'XXXXXX' in List %}
在名單中
{% endif %}

實例七,獲取當前網址,當前用戶等

獲取當前用戶

{{ request.user }}
應用範例:判斷是否登入
{% if request.user.is_authenticated %}
    {{ request.user.username }},您好!
{% else %}
    請登入,這裡放登入連接
{% endif %}

獲取當前網址

{{ request.path }}

參考資料

Django - 模板進階使用方式

創建一個 demotmpl 專案

django-admin startproject demotmpl
cd demotmpl
python manage.py startapp tmpl
自動產生的目錄結構
demotmpl/
├── tmpl
│   ├── __init__.py
│   ├── admin.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
└── demotmpl
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

定義在此專案中新增了一個應用 APP

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
 
    'tmpl',
]
編輯 tmpl/views.py
from django.shortcuts import render
 
 
def home(request):
    return render(request, 'home.html')
在 tmpl 目錄下新建一個 templates 文件夾,裡面新建一個 home.html
mkdir templates
nano home.html
目錄結構
demotmpl
├── tmpl
│   ├── __init__.py
│   ├── admin.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── templates
│   │   └── home.html
│   ├── tests.py
│   └── views.py
├── manage.py
└── demotmpl
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
編輯 home.html

<html>
<head>
    <title>KT-Lollipop</title>
</head>
<body>
 這裡是 KT-Lollipop 線上學習課程網站
<br>
歡迎來學習 Django
</body>
</html>
編輯 demotmpl/urls.py
from django.conf.urls import include, url
from django.contrib import admin
from tmpl import views as tmpl_views
 
 
urlpatterns = [
    url(r'^$', tmpl_views.home, name='home'),
    url(r'^admin/', admin.site.urls),
]
運行,看結果
python manage.py runserver
模板補充知識:
網站模板的設計,一般的,我們做網站有一些通用的部分,比如導航,底部,訪問統計代碼等等
nav.html, bottom.html, weba_nalytics.html
可以寫一個base.html 來包含這些通用文件(include)



    {% block title %}標題{% endblock %} - KT Lollipop 線上學習課程網站


 
{% include 'nav.html' %}
 
{% block content %}
這裡是默認內容,所有繼承自這個模板的,如果不覆蓋就顯示這裡的默認內容。
{% endblock %} {% include 'bottom.html' %}
如果需要,寫足夠多的block以便繼承的模板可以重寫該部分,include是包含其它文件的內容,就是把一些網頁共用的部分拿出來,重複利用,改動的時候也方便一些,還可以把廣告代碼放在一個單獨的html中,改動也方便一些,在用到的地方include進去。其它的頁面繼承自base.html就好了,繼承後的模板也可以在block塊中include其它的模板文件。
比如我們的首頁home.html,繼承或者說擴展(extends)原來的base.html,可以簡單這樣寫,重寫部分代碼(默認值的那一部分不用改)
{% extends 'base.html' %}
 
{% block title %}歡迎光臨首頁{% endblock %}
 
{% block content %}
{% include 'ad.html' %}
這裡是首頁,歡迎光臨
{% endblock %}

Django - 模板使用方式

關閉廣告 [X]