日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django框架使用

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django框架使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

---恢復內容開始---

Django 創建第一個項目

本章我們將介紹Django 管理工具及如何使用 Django 來創建項目,第一個項目我們以 HelloWorld 來命令項目。

?

Django 管理工具

安裝 Django 之后,您現在應該已經有了可用的管理工具 django-admin.py。我們可以使用 django-admin.py 來創建一個項目:

?

我們可以來看下django-admin.py的命令介紹:

?

[root@solar ~]# django-admin.py

Usage: django-admin.py subcommand [options] [args]

?

Options:

? -v VERBOSITY, --verbosity=VERBOSITY

? ? ? ? ? ? ? ? ? ? ? ? Verbosity level; 0=minimal output, 1=normal output,

? ? ? ? ? ? ? ? ? ? ? ? 2=verbose output, 3=very verbose output

? --settings=SETTINGS The Python path to a settings module, e.g.

? ? ? ? ? ? ? ? ? ? ? ? "myproject.settings.main". If this isn't provided, the

? ? ? ? ? ? ? ? ? ? ? ? DJANGO_SETTINGS_MODULE environment variable will be

? ? ? ? ? ? ? ? ? ? ? ? used.

? --pythonpath=PYTHONPATH

? ? ? ? ? ? ? ? ? ? ? ? A directory to add to the Python path, e.g.

? ? ? ? ? ? ? ? ? ? ? ? "/home/djangoprojects/myproject".

? --traceback Raise on exception

? --version show program's version number and exit

? -h, --help show this help message and exit

?

Type 'django-admin.py help <subcommand>' for help on a specific subcommand.

?

Available subcommands:

?

[django]

? ? check

? ? cleanup

? ? compilemessages

? ? createcachetable

……省略部分……

創建第一個項目

使用 django-admin.py 來創建 HelloWorld 項目:

?

django-admin.py startproject HelloWorld

創建完成后我們可以查看下項目的目錄結構:

?

[root@solar ~]# cd HelloWorld/

[root@solar HelloWorld]# tree

.

|-- HelloWorld

| |-- __init__.py

| |-- settings.py

| |-- urls.py

| `-- wsgi.py

`-- manage.py

目錄說明:

?

HelloWorld: 項目的容器。

manage.py: 一個實用的命令行工具,可讓你以各種方式與該 Django 項目進行交互。

HelloWorld/__init__.py: 一個空文件,告訴 Python 該目錄是一個 Python 包。

HelloWorld/settings.py: 該 Django 項目的設置/配置。

HelloWorld/urls.py: 該 Django 項目的 URL 聲明; 一份由 Django 驅動的網站"目錄"。

HelloWorld/wsgi.py: 一個 WSGI 兼容的 Web 服務器的入口,以便運行你的項目。

接下來我們進入 HelloWorld 目錄輸入以下命令,啟動服務器:

?

python manage.py runserver 0.0.0.0:8000

0.0.0.0讓其它電腦可連接到開發服務器,8000為端口號。如果不說明,那么端口號默認為8000。

?

在瀏覽器輸入你服務器的ip及端口號,如果正常啟動,輸出結果如下:

?

?

?

視圖和 URL 配置

在先前創建的 HelloWorld 目錄下的 HelloWorld 目錄新建一個 view.py 文件,并輸入代碼:

?

from django.http import HttpResponse

?

def hello(request):

?return HttpResponse("Hello world ! ")

接著,綁定 URL 與視圖函數。打開 urls.py 文件,刪除原來代碼,將以下代碼復制粘貼到 urls.py 文件中:

?

from django.conf.urls import *

from HelloWorld.view import hello

?

urlpatterns = patterns("",

?('^hello/$', hello),

)

整個目錄結構如下:

?

[root@solar HelloWorld]# tree

.

|-- HelloWorld

| |-- __init__.py

| |-- __init__.pyc

| |-- settings.py

| |-- settings.pyc

| |-- urls.py # url 配置

| |-- urls.pyc

| |-- view.py # 添加的視圖文件

| |-- view.pyc # 編譯后的視圖文件

| |-- wsgi.py

| `-- wsgi.pyc

`-- manage.py

完成后,啟動 Django 開發服務器,并在瀏覽器訪問打開瀏覽器并訪問:

?

?

?

?

?

?

?

Django 模板

在上一章節中我們使用 django.http.HttpResponse() 來輸出"Hello World!"。該方式將數據與視圖混合在一起,不符合Django的MVC思想。

?

本章節我們將為大家詳細介紹 Django 模板的應用,模板是一個文本,用于分離文檔的表現形式和內容。

?

模板應用實例

我們接著上一章節的項目將在 HelloWorld 目錄底下創建 templates 目錄并建立 hello.html文件,整個目錄結構如下:

?

HelloWorld/

|-- HelloWorld

| |-- __init__.py

| |-- __init__.pyc

| |-- settings.py

| |-- settings.pyc

| |-- urls.py

| |-- urls.pyc

| |-- view.py

| |-- view.pyc

| |-- wsgi.py

| `-- wsgi.pyc

|-- manage.py

`-- templates

? ? `-- hello.html

hello.html 文件代碼如下:

?

<h1>{{ hello }}</h1>

從模板中我們知道變量使用了雙括號。

?

接下來我們需要向Django說明模板文件的路徑,修改HelloWorld/settings.py,修改 TEMPLATES 中的 DIRS 為[BASE_DIR+"/templates",],如下所示:

?

TEMPLATES = [

? ? {

? ? ? ? 'BACKEND': 'django.template.backends.django.DjangoTemplates',

? ? ? ? 'DIRS': [BASE_DIR+"/templates",],

? ? ? ? 'APP_DIRS': True,

? ? ? ? 'OPTIONS': {

? ? ? ? ? ? 'context_processors': [

? ? ? ? ? ? ? ? 'django.template.context_processors.debug',

? ? ? ? ? ? ? ? 'django.template.context_processors.request',

? ? ? ? ? ? ? ? 'django.contrib.auth.context_processors.auth',

? ? ? ? ? ? ? ? 'django.contrib.messages.context_processors.messages',

? ? ? ? ? ? ],

? ? ? ? },

? ? },

]

我們現在修改 view.py,增加一個新的對象,用于向模板提交數據:

?

# -*- coding: utf-8 -*-

?

#from django.http import HttpResponse

from django.shortcuts import render

?

def hello(request):

? ? context = {}

? ? context['hello'] = 'Hello World!'

? ? return render(request, 'hello.html', context)

可以看到,我們這里使用render來替代之前使用的HttpResponse。render還使用了一個字典context作為參數。

?

context 字典中元素的鍵值 "hello" 對應了模板中的變量 "{{ hello }}"。

?

再訪問訪問http://192.168.45.3:8000/hello/,可以看到頁面:

?

?

?

這樣我們就完成了使用模板來輸出數據,從而實現數據與視圖分離。

?

接下來我們將具體介紹模板中常用的語法規則。

?

Django 模板標簽

if/else 標簽

?

基本語法格式如下:

?

{% if condition %}

? ? ?... display

{% endif %}

或者:

?

{% if condition1 %}

? ?... display 1

{% elif condiiton2 %}

? ?... display 2

{% else %}

? ?... display 3

{% endif %}

根據條件判斷是否輸出。if/else 支持嵌套。

?

{% if %} 標簽接受 and , or 或者 not 關鍵字來對多個變量做判斷 ,或者對變量取反( not ),例如:

?

{% if athlete_list and coach_list %}

? ? ?athletes 和 coaches 變量都是可用的。

{% endif %}

for 標簽

?

{% for %} 允許我們在一個序列上迭代。

?

與Python的 for 語句的情形類似,循環語法是 for X in Y ,Y是要迭代的序列而X是在每一個特定的循環中使用的變量名稱。

?

每一次循環中,模板系統會渲染在 {% for %} 和 {% endfor %} 之間的所有內容。

?

例如,給定一個運動員列表 athlete_list 變量,我們可以使用下面的代碼來顯示這個列表:

?

?

?

<ul>

{% for athlete in athlete_list %}

? ? <li>{{ athlete.name }}</li>

{% endfor %}

</ul>

給標簽增加一個 reversed 使得該列表被反向迭代:

?

{% for athlete in athlete_list reversed %}

...

{% endfor %}

可以嵌套使用 {% for %} 標簽:

?

{% for athlete in athlete_list %}

? ? <h1>{{ athlete.name }}</h1>

? ? <ul>

? ? {% for sport in athlete.sports_played %}

? ? ? ? <li>{{ sport }}</li>

? ? {% endfor %}

? ? </ul>

{% endfor %}

ifequal/ifnotequal 標簽

?

{% ifequal %} 標簽比較兩個值,當他們相等時,顯示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。

?

下面的例子比較兩個模板變量 user 和 currentuser :

?

{% ifequal user currentuser %}

? ? <h1>Welcome!</h1>

{% endifequal %}

和 {% if %} 類似, {% ifequal %} 支持可選的 {% else%} 標簽:8

?

{% ifequal section 'sitenews' %}

? ? <h1>Site News</h1>

{% else %}

? ? <h1>No News Here</h1>

{% endifequal %}

注釋標簽

?

Django 注釋使用 {# #}。

?

{# 這是一個注釋 #}

過濾器

?

模板過濾器可以在變量被顯示前修改它,過濾器使用管道字符,如下所示:

?

{{ name|lower }}

{{ name }} 變量被過濾器 lower 處理后,文檔大寫轉換文本為小寫。

?

過濾管道可以被* 套接* ,既是說,一個過濾器管道的輸出又可以作為下一個管道的輸入:

?

{{ my_list|first|upper }}

以上實例將第一個元素并將其轉化為大寫。

?

有些過濾器有參數。 過濾器的參數跟隨冒號之后并且總是以雙引號包含。 例如:

?

{{ bio|truncatewords:"30" }}

這個將顯示變量 bio 的前30個詞。

?

其他過濾器:

?

addslashes : 添加反斜杠到任何反斜杠、單引號或者雙引號前面。

date : 按指定的格式字符串參數格式化 date 或者 datetime 對象,實例:

{{ pub_date|date:"F j, Y" }}

length : 返回變量的長度。

include 標簽

?

{% include %} 標簽允許在模板中包含其它的模板的內容。

?

下面這兩個例子都包含了 nav.html 模板:

?

{% include "nav.html" %}

模板繼承

模板可以用繼承的方式來實現復用。

?

接下來我們先創建之前項目的 templates 目錄中添加 base.html 文件,代碼如下:

?

<html>

? <head>

? ? <title>Hello World!</title>

? </head>

?

? <body>

? ? <h1>Hello World!</h1>

? ? {% block mainbody %}

? ? ? ?<p>original</p>

? ? {% endblock %}

? </body>

</html>

以上代碼中,名為mainbody的block標簽是可以被繼承者們替換掉的部分。

?

所有的 {% block %} 標簽告訴模板引擎,子模板可以重載這些部分。

?

hello.html中繼承base.html,并替換特定block,hello.html修改后的代碼如下:

?

{% extends "base.html" %}

?

{% block mainbody %}

<p>繼承了 base.html 文件</p>

{% endblock %}

第一行代碼說明hello.html繼承了 base.html 文件??梢钥吹?#xff0c;這里相同名字的block標簽用以替換base.html的相應block。

?

重新訪問地址http://192.168.45.3:8000/hello/,輸出結果如下:

?

?

?

?

?

?

?

Django 模型

Django 對各種數據庫提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。

?

Django 為這些數據庫提供了統一的調用API。 我們可以根據自己業務需求選擇不同的數據庫。

?

MySQL 是 Web 應用中最常用的數據庫。本章節我們將以 Mysql 作為實例進行介紹。你可以通過本站的 MySQL 教程 了解更多Mysql的基礎知識。

?

數據庫配置

我們在項目的 settings.py 文件中找到 DATABASES 配置項,將其信息修改為:

?

DATABASES = {

? ? 'default': {

? ? ? ? 'ENGINE': 'django.db.backends.mysql',

? ? ? ? 'NAME': 'test',

? ? ? ? 'USER': 'test',

? ? ? ? 'PASSWORD': 'test123',

? ? ? ? 'HOST':'localhost',

? ? ? ? 'PORT':'3306',

? ? }

}

上面包含數據庫名稱和用戶的信息,它們與MySQL中對應數據庫和用戶的設置相同。Django根據這一設置,與MySQL中相應的數據庫和用戶連接起來。

?

定義模型

創建 APP

?

Django規定,如果要使用模型,必須要創建一個app。我們使用以下命令創建一個 TestModel 的 app:

?

python manage.py startapp TestModel

目錄結構如下:

?

HelloWorld

|-- TestModel

| |-- __init__.py

| |-- admin.py

| |-- models.py

| |-- tests.py

| `-- views.py

我們修改 TestModel/models.py文件,代碼如下:

?

# models.py

from django.db import models

?

class Test(models.Model):

? ? name = models.CharField(max_length=20)

以上的類名代表了數據庫表名,且繼承了models.Model,類里面的字段代表數據表中的字段(name),數據類型則由CharField(相當于varchar)、DateField(相當于datetime), max_length 參數限定長度。

?

接下來在settings.py中找到INSTALLED_APPS這一項,如下:

?

INSTALLED_APPS = (

? ? 'django.contrib.admin',

? ? 'django.contrib.auth',

? ? 'django.contrib.contenttypes',

? ? 'django.contrib.sessions',

? ? 'django.contrib.messages',

? ? 'django.contrib.staticfiles',

? ? 'TestModel', # 添加此項

)

在命令行中運行python manage.py syncdb,看到幾行"Creating table…"的字樣,你的數據表就創建好了。

?

Creating tables ...

……

Creating table TestModel_test #我們自定義的表

……

表名組成結構為:app名_類名(如:TestModel_test)。

?

注意:盡管我們沒有在models給表設置主鍵,但是Django會自動添加一個id作為主鍵。

?

數據庫操作

接下來我們在 HelloWorld 目錄中添加 testdb.py 文件,并修改urls.py:

?

from django.conf.urls import *

from HelloWorld.view import hello

from HelloWorld.testdb import testdb

?

urlpatterns = patterns("",

? ? ? ? ('^hello/$', hello),

? ? ? ? ('^testdb/$', testdb),

)

添加數據

?

添加數據需要先創建對象,然后再執行 save 函數,相當于SQL中的INSERT:

?

# -*- coding: utf-8 -*-

?

from django.http import HttpResponse

?

from TestModel.models import Test

?

# 數據庫操作

def testdb(request):

?test1 = Test(name='w3cschool.cc')

?test1.save()

?return HttpResponse("<p>數據添加成功!</p>")

訪問http://192.168.45.3:8000/testdb/ 就可以看到數據添加成功的提示。

?

獲取數據

?

Django提供了多種方式來獲取數據庫的內容,如下代碼所示:

?

# -*- coding: utf-8 -*-

?

from django.http import HttpResponse

?

from TestModel.models import Test

?

# 數據庫操作

def testdb(request):

?# 初始化

?response = ""

?response1 = ""

?

?

?# 通過objects這個模型管理器的all()獲得所有數據行,相當于SQL中的SELECT * FROM

?list = Test.objects.all()

??

?# filter相當于SQL中的WHERE,可設置條件過濾結果

?response2 = Test.objects.filter(id=1)?

?

?# 獲取單個對象

?response3 = Test.objects.get(id=1)?

?

?# 限制返回的數據 相當于 SQL 中的 OFFSET 0 LIMIT 2;

?Test.objects.order_by('name')[0:2]

?

?#數據排序

?Test.objects.order_by("id")

?

?# 上面的方法可以連鎖使用

?Test.objects.filter(name="w3cschool.cc").order_by("id")

?

?# 輸出所有數據

?for var in list:

? response1 += var.name + " "

?response = response1

?return HttpResponse("<p>" + response + "</p>")

輸出結果如下圖所示:

?

?

?

更新數據

?

修改數據可以使用 save() 或 update():

?

# -*- coding: utf-8 -*-

?

from django.http import HttpResponse

?

from TestModel.models import Test

?

# 數據庫操作

def testdb(request):

?# 修改其中一個id=1的name字段,再save,相當于SQL中的UPDATE

?test1 = Test.objects.get(id=1)

?test1.name = 'w3cschool菜鳥教程'

?test1.save()

?

?# 另外一種方式

?#Test.objects.filter(id=1).update(name='w3cschool菜鳥教程')

?

?# 修改所有的列

?# Test.objects.all().update(name='w3cschool菜鳥教程')

?

?return HttpResponse("<p>修改成功</p>")

刪除數據

?

刪除數據庫中的對象只需調用該對象的delete()方法即可:

?

# -*- coding: utf-8 -*-

?

from django.http import HttpResponse

?

from TestModel.models import Test

?

# 數據庫操作

def testdb(request):

?# 刪除id=1的數據

?test1 = Test.objects.get(id=1)

?test1.delete()

?

?# 另外一種方式

?# Test.objects.filter(id=1).delete()

?

?# 刪除所有數據

?# Test.objects.all().delete()

?

?return HttpResponse("<p>刪除成功</p>")Django 創建第一個項目

本章我們將介紹Django 管理工具及如何使用 Django 來創建項目,第一個項目我們以 HelloWorld 來命令項目。

?

Django 管理工具

安裝 Django 之后,您現在應該已經有了可用的管理工具 django-admin.py。我們可以使用 django-admin.py 來創建一個項目:

?

我們可以來看下django-admin.py的命令介紹:

?

[root@solar ~]# django-admin.py

Usage: django-admin.py subcommand [options] [args]

?

Options:

? -v VERBOSITY, --verbosity=VERBOSITY

? ? ? ? ? ? ? ? ? ? ? ? Verbosity level; 0=minimal output, 1=normal output,

? ? ? ? ? ? ? ? ? ? ? ? 2=verbose output, 3=very verbose output

? --settings=SETTINGS The Python path to a settings module, e.g.

? ? ? ? ? ? ? ? ? ? ? ? "myproject.settings.main". If this isn't provided, the

? ? ? ? ? ? ? ? ? ? ? ? DJANGO_SETTINGS_MODULE environment variable will be

? ? ? ? ? ? ? ? ? ? ? ? used.

? --pythonpath=PYTHONPATH

? ? ? ? ? ? ? ? ? ? ? ? A directory to add to the Python path, e.g.

? ? ? ? ? ? ? ? ? ? ? ? "/home/djangoprojects/myproject".

? --traceback Raise on exception

? --version show program's version number and exit

? -h, --help show this help message and exit

?

Type 'django-admin.py help <subcommand>' for help on a specific subcommand.

?

Available subcommands:

?

[django]

? ? check

? ? cleanup

? ? compilemessages

? ? createcachetable

……省略部分……

創建第一個項目

使用 django-admin.py 來創建 HelloWorld 項目:

?

django-admin.py startproject HelloWorld

創建完成后我們可以查看下項目的目錄結構:

?

[root@solar ~]# cd HelloWorld/

[root@solar HelloWorld]# tree

.

|-- HelloWorld

| |-- __init__.py

| |-- settings.py

| |-- urls.py

| `-- wsgi.py

`-- manage.py

目錄說明:

?

HelloWorld: 項目的容器。

manage.py: 一個實用的命令行工具,可讓你以各種方式與該 Django 項目進行交互。

HelloWorld/__init__.py: 一個空文件,告訴 Python 該目錄是一個 Python 包。

HelloWorld/settings.py: 該 Django 項目的設置/配置。

HelloWorld/urls.py: 該 Django 項目的 URL 聲明; 一份由 Django 驅動的網站"目錄"。

HelloWorld/wsgi.py: 一個 WSGI 兼容的 Web 服務器的入口,以便運行你的項目。

接下來我們進入 HelloWorld 目錄輸入以下命令,啟動服務器:

?

python manage.py runserver 0.0.0.0:8000

0.0.0.0讓其它電腦可連接到開發服務器,8000為端口號。如果不說明,那么端口號默認為8000。

?

在瀏覽器輸入你服務器的ip及端口號,如果正常啟動,輸出結果如下:

?

?

?

視圖和 URL 配置

在先前創建的 HelloWorld 目錄下的 HelloWorld 目錄新建一個 view.py 文件,并輸入代碼:

?

from django.http import HttpResponse

?

def hello(request):

?return HttpResponse("Hello world ! ")

接著,綁定 URL 與視圖函數。打開 urls.py 文件,刪除原來代碼,將以下代碼復制粘貼到 urls.py 文件中:

?

from django.conf.urls import *

from HelloWorld.view import hello

?

urlpatterns = patterns("",

?('^hello/$', hello),

)

整個目錄結構如下:

?

[root@solar HelloWorld]# tree

.

|-- HelloWorld

| |-- __init__.py

| |-- __init__.pyc

| |-- settings.py

| |-- settings.pyc

| |-- urls.py # url 配置

| |-- urls.pyc

| |-- view.py # 添加的視圖文件

| |-- view.pyc # 編譯后的視圖文件

| |-- wsgi.py

| `-- wsgi.pyc

`-- manage.py

完成后,啟動 Django 開發服務器,并在瀏覽器訪問打開瀏覽器并訪問:

?

?

?

?

?

?

?

Django 模板

在上一章節中我們使用 django.http.HttpResponse() 來輸出"Hello World!"。該方式將數據與視圖混合在一起,不符合Django的MVC思想。

?

本章節我們將為大家詳細介紹 Django 模板的應用,模板是一個文本,用于分離文檔的表現形式和內容。

?

模板應用實例

我們接著上一章節的項目將在 HelloWorld 目錄底下創建 templates 目錄并建立 hello.html文件,整個目錄結構如下:

?

HelloWorld/

|-- HelloWorld

| |-- __init__.py

| |-- __init__.pyc

| |-- settings.py

| |-- settings.pyc

| |-- urls.py

| |-- urls.pyc

| |-- view.py

| |-- view.pyc

| |-- wsgi.py

| `-- wsgi.pyc

|-- manage.py

`-- templates

? ? `-- hello.html

hello.html 文件代碼如下:

?

<h1>{{ hello }}</h1>

從模板中我們知道變量使用了雙括號。

?

接下來我們需要向Django說明模板文件的路徑,修改HelloWorld/settings.py,修改 TEMPLATES 中的 DIRS 為[BASE_DIR+"/templates",],如下所示:

?

TEMPLATES = [

? ? {

? ? ? ? 'BACKEND': 'django.template.backends.django.DjangoTemplates',

? ? ? ? 'DIRS': [BASE_DIR+"/templates",],

? ? ? ? 'APP_DIRS': True,

? ? ? ? 'OPTIONS': {

? ? ? ? ? ? 'context_processors': [

? ? ? ? ? ? ? ? 'django.template.context_processors.debug',

? ? ? ? ? ? ? ? 'django.template.context_processors.request',

? ? ? ? ? ? ? ? 'django.contrib.auth.context_processors.auth',

? ? ? ? ? ? ? ? 'django.contrib.messages.context_processors.messages',

? ? ? ? ? ? ],

? ? ? ? },

? ? },

]

我們現在修改 view.py,增加一個新的對象,用于向模板提交數據:

?

# -*- coding: utf-8 -*-

?

#from django.http import HttpResponse

from django.shortcuts import render

?

def hello(request):

? ? context = {}

? ? context['hello'] = 'Hello World!'

? ? return render(request, 'hello.html', context)

可以看到,我們這里使用render來替代之前使用的HttpResponse。render還使用了一個字典context作為參數。

?

context 字典中元素的鍵值 "hello" 對應了模板中的變量 "{{ hello }}"。

?

再訪問訪問http://192.168.45.3:8000/hello/,可以看到頁面:

?

?

?

這樣我們就完成了使用模板來輸出數據,從而實現數據與視圖分離。

?

接下來我們將具體介紹模板中常用的語法規則。

?

Django 模板標簽

if/else 標簽

?

基本語法格式如下:

?

{% if condition %}

? ? ?... display

{% endif %}

或者:

?

{% if condition1 %}

? ?... display 1

{% elif condiiton2 %}

? ?... display 2

{% else %}

? ?... display 3

{% endif %}

根據條件判斷是否輸出。if/else 支持嵌套。

?

{% if %} 標簽接受 and , or 或者 not 關鍵字來對多個變量做判斷 ,或者對變量取反( not ),例如:

?

{% if athlete_list and coach_list %}

? ? ?athletes 和 coaches 變量都是可用的。

{% endif %}

for 標簽

?

{% for %} 允許我們在一個序列上迭代。

?

與Python的 for 語句的情形類似,循環語法是 for X in Y ,Y是要迭代的序列而X是在每一個特定的循環中使用的變量名稱。

?

每一次循環中,模板系統會渲染在 {% for %} 和 {% endfor %} 之間的所有內容。

?

例如,給定一個運動員列表 athlete_list 變量,我們可以使用下面的代碼來顯示這個列表:

?

?

?

<ul>

{% for athlete in athlete_list %}

? ? <li>{{ athlete.name }}</li>

{% endfor %}

</ul>

給標簽增加一個 reversed 使得該列表被反向迭代:

?

{% for athlete in athlete_list reversed %}

...

{% endfor %}

可以嵌套使用 {% for %} 標簽:

?

{% for athlete in athlete_list %}

? ? <h1>{{ athlete.name }}</h1>

? ? <ul>

? ? {% for sport in athlete.sports_played %}

? ? ? ? <li>{{ sport }}</li>

? ? {% endfor %}

? ? </ul>

{% endfor %}

ifequal/ifnotequal 標簽

?

{% ifequal %} 標簽比較兩個值,當他們相等時,顯示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。

?

下面的例子比較兩個模板變量 user 和 currentuser :

?

{% ifequal user currentuser %}

? ? <h1>Welcome!</h1>

{% endifequal %}

和 {% if %} 類似, {% ifequal %} 支持可選的 {% else%} 標簽:8

?

{% ifequal section 'sitenews' %}

? ? <h1>Site News</h1>

{% else %}

? ? <h1>No News Here</h1>

{% endifequal %}

注釋標簽

?

Django 注釋使用 {# #}。

?

{# 這是一個注釋 #}

過濾器

?

模板過濾器可以在變量被顯示前修改它,過濾器使用管道字符,如下所示:

?

{{ name|lower }}

{{ name }} 變量被過濾器 lower 處理后,文檔大寫轉換文本為小寫。

?

過濾管道可以被* 套接* ,既是說,一個過濾器管道的輸出又可以作為下一個管道的輸入:

?

{{ my_list|first|upper }}

以上實例將第一個元素并將其轉化為大寫。

?

有些過濾器有參數。 過濾器的參數跟隨冒號之后并且總是以雙引號包含。 例如:

?

{{ bio|truncatewords:"30" }}

這個將顯示變量 bio 的前30個詞。

?

其他過濾器:

?

addslashes : 添加反斜杠到任何反斜杠、單引號或者雙引號前面。

date : 按指定的格式字符串參數格式化 date 或者 datetime 對象,實例:

{{ pub_date|date:"F j, Y" }}

length : 返回變量的長度。

include 標簽

?

{% include %} 標簽允許在模板中包含其它的模板的內容。

?

下面這兩個例子都包含了 nav.html 模板:

?

{% include "nav.html" %}

模板繼承

模板可以用繼承的方式來實現復用。

?

接下來我們先創建之前項目的 templates 目錄中添加 base.html 文件,代碼如下:

?

<html>

? <head>

? ? <title>Hello World!</title>

? </head>

?

? <body>

? ? <h1>Hello World!</h1>

? ? {% block mainbody %}

? ? ? ?<p>original</p>

? ? {% endblock %}

? </body>

</html>

以上代碼中,名為mainbody的block標簽是可以被繼承者們替換掉的部分。

?

所有的 {% block %} 標簽告訴模板引擎,子模板可以重載這些部分。

?

hello.html中繼承base.html,并替換特定block,hello.html修改后的代碼如下:

?

{% extends "base.html" %}

?

{% block mainbody %}

<p>繼承了 base.html 文件</p>

{% endblock %}

第一行代碼說明hello.html繼承了 base.html 文件??梢钥吹?#xff0c;這里相同名字的block標簽用以替換base.html的相應block。

?

重新訪問地址http://192.168.45.3:8000/hello/,輸出結果如下:

?

?

?

?

?

?

?

Django 模型

Django 對各種數據庫提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。

?

Django 為這些數據庫提供了統一的調用API。 我們可以根據自己業務需求選擇不同的數據庫。

?

MySQL 是 Web 應用中最常用的數據庫。本章節我們將以 Mysql 作為實例進行介紹。你可以通過本站的 MySQL 教程 了解更多Mysql的基礎知識。

?

數據庫配置

我們在項目的 settings.py 文件中找到 DATABASES 配置項,將其信息修改為:

?

DATABASES = {

? ? 'default': {

? ? ? ? 'ENGINE': 'django.db.backends.mysql',

? ? ? ? 'NAME': 'test',

? ? ? ? 'USER': 'test',

? ? ? ? 'PASSWORD': 'test123',

? ? ? ? 'HOST':'localhost',

? ? ? ? 'PORT':'3306',

? ? }

}

上面包含數據庫名稱和用戶的信息,它們與MySQL中對應數據庫和用戶的設置相同。Django根據這一設置,與MySQL中相應的數據庫和用戶連接起來。

?

定義模型

創建 APP

?

Django規定,如果要使用模型,必須要創建一個app。我們使用以下命令創建一個 TestModel 的 app:

?

python manage.py startapp TestModel

目錄結構如下:

?

HelloWorld

|-- TestModel

| |-- __init__.py

| |-- admin.py

| |-- models.py

| |-- tests.py

| `-- views.py

我們修改 TestModel/models.py文件,代碼如下:

?

# models.py

from django.db import models

?

class Test(models.Model):

? ? name = models.CharField(max_length=20)

以上的類名代表了數據庫表名,且繼承了models.Model,類里面的字段代表數據表中的字段(name),數據類型則由CharField(相當于varchar)、DateField(相當于datetime), max_length 參數限定長度。

?

接下來在settings.py中找到INSTALLED_APPS這一項,如下:

?

INSTALLED_APPS = (

? ? 'django.contrib.admin',

? ? 'django.contrib.auth',

? ? 'django.contrib.contenttypes',

? ? 'django.contrib.sessions',

? ? 'django.contrib.messages',

? ? 'django.contrib.staticfiles',

? ? 'TestModel', # 添加此項

)

在命令行中運行python manage.py syncdb,看到幾行"Creating table…"的字樣,你的數據表就創建好了。

?

Creating tables ...

……

Creating table TestModel_test #我們自定義的表

……

表名組成結構為:app名_類名(如:TestModel_test)。

?

注意:盡管我們沒有在models給表設置主鍵,但是Django會自動添加一個id作為主鍵。

?

數據庫操作

接下來我們在 HelloWorld 目錄中添加 testdb.py 文件,并修改urls.py:

?

from django.conf.urls import *

from HelloWorld.view import hello

from HelloWorld.testdb import testdb

?

urlpatterns = patterns("",

? ? ? ? ('^hello/$', hello),

? ? ? ? ('^testdb/$', testdb),

)

添加數據

?

添加數據需要先創建對象,然后再執行 save 函數,相當于SQL中的INSERT:

?

# -*- coding: utf-8 -*-

?

from django.http import HttpResponse

?

from TestModel.models import Test

?

# 數據庫操作

def testdb(request):

?test1 = Test(name='w3cschool.cc')

?test1.save()

?return HttpResponse("<p>數據添加成功!</p>")

訪問http://192.168.45.3:8000/testdb/ 就可以看到數據添加成功的提示。

?

獲取數據

?

Django提供了多種方式來獲取數據庫的內容,如下代碼所示:

?

# -*- coding: utf-8 -*-

?

from django.http import HttpResponse

?

from TestModel.models import Test

?

# 數據庫操作

def testdb(request):

?# 初始化

?response = ""

?response1 = ""

?

?

?# 通過objects這個模型管理器的all()獲得所有數據行,相當于SQL中的SELECT * FROM

?list = Test.objects.all()

??

?# filter相當于SQL中的WHERE,可設置條件過濾結果

?response2 = Test.objects.filter(id=1)?

?

?# 獲取單個對象

?response3 = Test.objects.get(id=1)?

?

?# 限制返回的數據 相當于 SQL 中的 OFFSET 0 LIMIT 2;

?Test.objects.order_by('name')[0:2]

?

?#數據排序

?Test.objects.order_by("id")

?

?# 上面的方法可以連鎖使用

?Test.objects.filter(name="w3cschool.cc").order_by("id")

?

?# 輸出所有數據

?for var in list:

? response1 += var.name + " "

?response = response1

?return HttpResponse("<p>" + response + "</p>")

輸出結果如下圖所示:

?

?

?

更新數據

?

修改數據可以使用 save() 或 update():

?

# -*- coding: utf-8 -*-

?

from django.http import HttpResponse

?

from TestModel.models import Test

?

# 數據庫操作

def testdb(request):

?# 修改其中一個id=1的name字段,再save,相當于SQL中的UPDATE

?test1 = Test.objects.get(id=1)

?test1.name = 'w3cschool菜鳥教程'

?test1.save()

?

?# 另外一種方式

?#Test.objects.filter(id=1).update(name='w3cschool菜鳥教程')

?

?# 修改所有的列

?# Test.objects.all().update(name='w3cschool菜鳥教程')

?

?return HttpResponse("<p>修改成功</p>")

刪除數據

?

刪除數據庫中的對象只需調用該對象的delete()方法即可:

?

# -*- coding: utf-8 -*-

?

from django.http import HttpResponse

?

from TestModel.models import Test

?

# 數據庫操作

def testdb(request):

?# 刪除id=1的數據

?test1 = Test.objects.get(id=1)

?test1.delete()

?

?# 另外一種方式

?# Test.objects.filter(id=1).delete()

?

?# 刪除所有數據

?# Test.objects.all().delete()

?

?return HttpResponse("<p>刪除成功</p>")

---恢復內容結束---

轉載于:https://www.cnblogs.com/QI1125/p/7841611.html

總結

以上是生活随笔為你收集整理的Django框架使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。