python+Django框架運用(二)

Django應用 與 模板

應用就是網站中的一個獨立的程序模塊,在Django 中,主目錄通常不處理用戶的具體請求,css

主目錄主要作的是項目的初始化和設置,以及請求的分發。html

 

建立應用

1. 建立應用命令數據庫

  ./manage.py startapp 應用名稱django

2. 註冊應用後端

  建立完應用後,必須在settings.py中進行註冊服務器

  在文件中找到INSTALLED_APPS(列表)中加上註冊的應用名app

3.應用的結構組成函數

  migrations(目錄)   ------> 存放數據庫中間文件(日誌文件)oop

  __init__.py      ------> 應用的初始化文件測試

  admin.py         ------> 應用的後臺管理配置文件

  apps.py        ------> 應用的屬性配置文件

  models.py       ------> 模型文件,與數據庫相關

  tests.py        ------> 測試模塊

  views.py       ------> 定義視圖的文件

  

Django中模板--(Templates)

模板是要動態給用戶呈現的網頁內容,其實就是一個網頁(一個先後端結合的網頁)。

模板設置

模板的設置與settings.py中TEMPLATES變量(列表)相關,裏面存放的字典。

BACKEND: 指定模板的搜索引擎(通常不用更改)

DIRS:指定模板的存放的目錄,若是爲空,Django會到應用中去搜索名爲templates

  的目錄,做爲模板的管理目錄。

  例如: DIRS = ['index.temp']   ----> 表示指定index應用的模板存放目錄爲temp

  ps: 這裏通常都是爲空,而後在每一個應用中建立一個templates目錄。

APP_DIRS:(布爾值)爲True則表示,先從DIRS中指定的目錄中查找模板,

  沒有再搜templates目錄

 

模板的加載方式

一、使用loader獲取模板,經過HttpResponse進行響應

 
 
from django.shortcuts import render
from django.template import loader
def login_views(request):   # 加載模板,login.html爲模板文件
  te = loader.get_template('login.html')   # 將模板渲染成字符串
  html = te.render()   # HttpResponse響應給客戶端
  return HttpResponse(html)

2.使用render直接加載模板並返回(推薦)

from django.shortcuts import render
def login_views(request):    # 將模板渲染,並返回   return render(request, 'login.html')

模板的變量

將後端的數據傳遞給模板,在模板中,會根據變量的值進行顯示。

在Django中,容許傳遞給模板的數據類型,數值類型、字符串、列表、元組、字典、函數、對象

# loader 方式
def login_views(request):
    dic = {
        'user': 'laige''pwd': '123456'  
    }
    
    te = loader.get_template('login.html')
    html = te.render(dic)
    return HttpResponse(html)


# render 方式
def login_views(request):
    dic = {
        'user': 'laige''pwd': '123456'  
    }
    # 將模板渲染,並返回
    return render(request, 'login.html', dic)

# 將本地變量傳入 -- locals()
def login_views(request):
    dic = {
        'user': 'laige''pwd': '123456'  
    }
    # 將模板渲染,並返回
    return render(request, 'login.html', locals())

模板的標籤

標籤能夠將服務器中的一些功能嵌入到模板中

基本語法:{%  標籤內容  %}

經常使用的一些標籤:

<!--  for 循環  
    容許使用 for 提供的內置變量 - forloop
    一、forloop.counter 
    記錄當前循環的次數,從1開始
    二、forloop.first
    是不是第一次循環(第一項)
    三、forloop.last
    是不是最後一次循環(最後一項)
-->
{% for 變量 in 迭代對象 %}
    <h3>hello  hello !</h3>
{% endfor %}



<!--  if 條件  
    ps: 注意條件中and和or不能同時出現
-->
{% if 條件 %}
    <p> 知足條件,執行!</p>
{% elif 條件1 %}
    <p> 知足條件1,執行!</p>
{% else %}
    <p>不知足以上條件,執行!</p>
{% endif %}

ps:這裏只是舉了兩個經常使用的例子,

具體更多的標籤內容能夠查看文檔:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/

模板的過濾器

過濾器主要是在顯示變量的數據以前,對數據進行篩選和改變

基本語法:{{ 變量|過濾器:參數 }}

幾個簡單的過濾器:

<!-- 將value變爲大寫字符  -->
{{value|upper}}

<!-- 將value變爲小寫字符  -->
{{value|lower}}

<!-- 將num累加到value以後 -->
{{value|add:num}}

<!-- 將value四捨五入到n位小數 -->
{{value|floatformat:n}}

<!-- 將字符串截取到n位(包含...) -->
{{value|truncatechars:n}}

ps:具體更多的過濾器內容能夠查看文檔:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/

 

 模板的靜態文件處理

這裏的靜態文件指的是不須要嵌入到服務器端的內容的文件,

好比:圖片、css、js、html都屬於靜態文件

在Django中靜態文件的處理,須要在settings.py中設置靜態文件的訪問和存儲路徑:

# 一、指定靜態文件訪問路徑:
# 當訪問路徑是:http://localhost:8000/static/*** 一概到靜態文件存儲路徑中搜索靜態文件
STATIC_URL = '/static/'


# 二、指定靜態文件存儲路徑:
# 在項目中的static目錄中以及全部應用中的static目錄中存放的都是靜態文件
STATICFILES_DIRS=(BASE_DIR, 'static')

Django中訪問靜態文件:

<!-- 直接使用localhost:8000/static/*** -->
<img src='/static/***'>



<!-- 在模板的最頂層增長 -->
{% load static %}
<!-- 使用{% static %}訪問靜態文件資源  -->
<img src="{% static 'img/logo.jpg' %}">

 

模板的繼承

當多個模板(網頁)具有大部分相同內容時,可使用繼承的方式,將相同的內容

繼承過來,再增長、修改屬於本身的內容便可。

基礎語法:

<!-- 父模板 -->
<!-- 必須在父模板中標識出哪些內容時容許被修改的 -->
<!--
    block標籤,定義子模板容許被修改的內容
    在子模板中,若是不修改block中內容,則按照父模板中內容正常顯示
-->
{% block  名稱 %}
    父模板正常顯示,可在子模板修改的內容
{% endblock %}
<!-- 子模板 -->

<!-- 在最頂端增長,繼承父模板 
    login.html是父模板的文件名稱
-->
{% extents 'login.html' %}

<!-- 增長block標籤, 修改須要更改的內容 
這裏修改的內容必須是在父模板中使用block定義過的
-->
{% block 名稱 %}
    子模板本身的內容
{% endblock %}

 

 

*這裏補充一個內容:

  urls.py路由文件中的url函數,url有個name參數,是指定路徑的別名的。

  url(r'^login/$', login_views, name='login')

  只有定義以後,能夠在模板中使用url的別名:

  {% url '別名' %}

  例如:

    <a href={% url 'login' %}>登陸</a>

    這樣點擊登陸這個連接,就會根據別名,跳轉到login_views視圖

 

未完待續......

相關文章
相關標籤/搜索