DJANGO[Python語言]

DJANGO[Python語言]

Django 是用python語言寫的開源web開發框架(open source web framework),它鼓勵快速開發,並遵循MVC設計。Django遵守 BSD著作權,初次發布於2005年7月, 並於2008年9月發布了第一個正式版本1.0。最新的版本是Django 1.2.3,於2010年9月10日發布。

基本信息

1、開源web開發框架(Python語言)

概述

django logo
django logo

Django根據比利時的爵士音樂家DjangoReinhardt命名,他是一個吉普賽人,主要以演奏吉它為主,還演奏過小提琴等。

設計哲學

Django的主要目的是簡便、快速的開發資料庫驅動的網站。它強調代碼復用,多個組件可以很方便的以“外掛程式”形式服務於整個框架,Django有許多功能強大的第三方外掛程式,你甚至可以很方便的開發出自己的工具包。這使得Django具有很強的可擴展性。它還強調快速開發和DRY(DoNotRepeatYourself)原則。
Django基於MTV的設計十分優美:
對象關係映射(ORM,object-relationalmapping)
以Python類形式定義你的數據模型,ORM將模型與關係資料庫連線起來,你將得到一個非常容易使用的資料庫API,同時你也可以在Django中使用原始的SQL語句。
URL分派
使用正則表達式匹配URL,你可以任意設計的URL,沒有框架的特定限定。象你喜歡的一樣靈活。
模版系統
使用Django強大而可擴展的模板語言,可以分隔設計、內容和Python代碼。並且具有可繼承性。
表單處理
你可以方便的生成各種表單模型,實現表單的有效性檢驗。可以方便的從你定義的模型實例生成相應的表單。
Cache系統
可以掛在記憶體緩衝或其它的框架實現超級緩衝--實現你所需要的粒度。
會話(session),用戶登錄與許可權檢查
快速開發用戶會話功能。
國際化
內置國際化系統,方便開發出多種語言的網站。
自動化的管理界面
不需要你花大量的工作來創建人員管理和更新內容。Django自帶一個ADMINsite,類似於內容管理系統。

安裝 Django

本文使用了Django的開發版本,以便能夠利用Django框架的最新改進。建議您在0.95版正式發布之前使用這個版本。關於最新發行版本,請參閱Django的Web站點(再次請您參閱參考資料來獲得連結)。
按照以下步驟下載並安裝Django:
清單1.下載並安裝Django
~/downloads#svncohttp://code.djangoproject.com/svn/django/trunk/django_src
~/downloads#cddjango_src
~/downloads#pythonsetup.pyinstall

Django 管理工具

在安裝Django之後,您現在應該已經有了可用的管理工具django-admin.py。清單2給出了這個管理工具中可以使用的一些命令:
清單2.使用Django管理工具
~/dev$django-admin.py
usage:django-admin.pyaction[options]
actions:
adminindex[modelmodule...]
Printstheadmin-indextemplatesnippetforthegivenmodel
modulename(s).
...snip...
startapp[appname]
CreatesaDjangoappdirectorystructureforthegivenappname
inthecurrentdirectory.
startproject[projectname]
CreatesaDjangoprojectdirectorystructureforthegiven
projectnameinthecurrentdirectory.
validate
Validatesallinstalledmodels.
options:
-h,--help showthishelpmessageandexit
--settings=SETTINGS Pythonpathtosettingsmodule,e.g.
"myproject.settings.main".Ifthisisn't
provided,theDJANGO_SETTINGS_MODULE
environmentvariablewillbeused.
--pythonpath=PYTHONPATH
LetsyoumanuallyaddadirectorythePython
path,e.g."/home/djangoprojects/myproject".

Django 項目和應用程式

要啟動Django項,請使用django-adminstartproject命令,如下所示:
清單3.啟動項目
~/dev$django-admin.pystartprojectdjproject
上面這個命令會創建一個djproject目錄,其中包含了運行Django項目所需要的基本配置檔案:
清單4.djproject目錄的內容
__init__.py
manage.py
settings.py
urls.py
對於這個項目來說,我們要構建一個職位公告板應用程式“jobs”。要創建應用程式,可以使用manage.py腳本,這是一個特定於項目的django-admin.py腳本,其中settings.py檔案可以自動提供:
清單5.使用manage.pystartapp
~/dev$cddjproject
~/dev/djproject$pythonmanage.pystartappjobs
這將創建一個應用程式骨架,其中模型有一個Python模組,視圖有另外一個Python模組。jobs目錄中包含以下檔案:
清單6.jobs應用程式目錄中的內容
__init__.py
models.py
views.py
提供應用程式在項目中的位置純粹是為新Django開發人員建立的一種慣例,並不是必需的。一旦開始在幾個項目中混合使用應用程式,就可以將應用程式放到自己的命名空間中,並使用設定和主URL檔案將它們綁定在一起。現在,請按照下面給出的步驟執行操作。
為了使Django認識到新應用程式的存在,還需要向settings.py檔案中的INSTALLED_APPS添加一個條目。對於這個職位公告板應用程式來說,我們必須添加字元串djproject.jobs:
清單7.向settings.py中添加一個條目
INSTALLED_APPS=(
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'djproject.jobs',
)

創建一個模型

Django提供了自己的對象關係型數據映射組件(object-relationalmapper,ORM)庫,它可以通過Python對象接口支持動態資料庫訪問。這個Python接口非常有用,功能十分強大,但如果需要,也可以靈活地不使用這個接口,而是直接使用SQL。
ORM目前提供了對PostgreSQL、MySQL、SQLite和Microsoft®SQL資料庫的支持。
這個例子使用SQLite作為後台資料庫。SQLite是一個輕量級資料庫,它不需要進行任何配置,自身能夠以一個簡單檔案的形式存在於磁碟上。要使用SQLite,可以簡單地使用setuptools來安裝pysqlite(有關setuptools的更多資料,尤其是有關easy_install工具(需要單獨安裝)的資料,請參閱參考資料):
easy_installpysqlite
在使用這個模型之前,需要在設定檔案中對資料庫進行配置。SQLite只需要指定資料庫引擎和資料庫名即可。
清單8.在settings.py中配置資料庫
DATABASE_ENGINE='sqlite3'
DATABASE_NAME='/path/to/dev/djproject/database.db'
DATABASE_USER=''
DATABASE_PASSWORD=''
DATABASE_HOST=''
DATABASE_PORT=''
這個職位公告板應用程式有兩種類型的對象:Location和Job。Location包含city、state(可選)和country欄位。Job包含location、title、description和publishdate欄位。
清單9.jobs/models.py模組
fromdjango.dbimportmodels
classLocation(models.Model):
city=models.CharField(maxlength=50)
state=models.CharField(maxlength=50,null=True,blank=True)
country=models.CharField(maxlength=50)
def__str__(self):
ifself.state:
return"%s,%s,%s"%(self.city,self.state,self.country)
else:
return"%s,%s"%(self.city,self.country)
classJob(models.Model):
pub_date=models.DateField()
job_title=models.CharField(maxlength=50)
job_description=models.TextField()
location=models.ForeignKey(Location)
def__str__(self):
return"%s(%s)"%(self.job_title,self.location)
__str__方法是Python中的一個特殊類,它返回對象的字元串表示。Django在Admin工具中顯示對象時廣泛地使用了這個方法。
要設定這個模型的模式,請返回manage.py的sql命令。此時模式尚未確定。
清單10.使用manage.pysql命令查看資料庫模式
~/dev/djproject$pythonmanage.pysqljobs
BEGIN;
CREATETABLE"jobs_job"(
"id"integerNOTNULLPRIMARYKEY,
"pub_date"dateNOTNULL,
"job_title"varchar(50)NOTNULL,
"job_description"textNOTNULL,
"location_id"integerNOTNULL
);
CREATETABLE"jobs_location"(
"id"integerNOTNULLPRIMARYKEY,
"city"varchar(50)NOTNULL,
"state"varchar(50)NULL,
"country"varchar(50)NOTNULL
);
COMMIT;
為了初始化並安裝這個模型,請運行資料庫命令syncdb:
~/dev/djproject$pythonmanage.pysyncdb
注意,syncdb命令要求我們創建一個超級用戶帳號。這是因為django.contrib.auth應用程式(提供基本的用戶身份驗證功能)默認情況下是在INSTALLED_APPS設定中提供的。超級用戶名和密碼用來登錄將在下一節介紹的管理工具。記住,這是Django的超級用戶,而不是系統的超級用戶。

查詢集

Django模型通過默認的Manager類objects來訪問資料庫。例如,要列印所有Job的列表,則應該使用objects管理器的all方法:
清單11.列印所有的職位
>>>fromjobs.modelsimportJob
>>>forjobinJob.objects.all():
...printjob
Manager類還有兩個過濾方法:一個是filter,另外一個是exclude。過濾方法可以接受滿足某個條件的所有方法,但是排除不滿足這個條件的其他方法。下面的查詢應該可以給出相同的結果(“gte”表示“大於或等於”,而“lt”表示“小於”)。
清單12.排除和過濾職位
>>>fromjobs.modelsimportJob
>>>fromdatetimeimportdatetime
>>>q1=Job.objects.filter(pub_date__gte=datetime(2006,1,1))
>>>q2=Job.objects.exclude(pub_date__lt=datetime(2006,1,1))
filter和exclude方法返回一些QuerySet對象,這些對象可以連結在一起,甚至可以執行連線操作。下面的q4查詢會查找從2006年1月1日開始在俄亥俄州的Cleveland張貼的職位:
清單13.對職位進行更多的排除和過濾
>>>fromjobs.modelsimportJob
>>>fromdatetimeimportdatetime
>>>q3=Job.objects.filter(pub_date__gte=datetime(2006,1,1))
>>>q4=q3.filter(location__city__exact="Cleveland",
...location__state__exact="Ohio")
QuerySets是惰性的,這一點非常不錯。這意味著只在對資料庫進行求值之後才會對它們執行查詢,這會比立即執行查詢的速度更快。
這種惰性利用了Python的分片(slicing)功能。下面的代碼並沒有先請求所有的記錄,然後對所需要的記錄進行分片,而是在實際的查詢中使用了5作為OFFSET、10作為LIMIT,這可以極大地提高性能。
清單14.Python分片
>>>fromjobs.modelsimportJob
>>>forjobinJob.objects.all()[5:15]
...printjob
注意:使用count方法可以確定一個QuerySet中有多少記錄。Python的len方法會進行全面的計算,然後統計那些以記錄形式返回的行數,而count方法執行的則是真正的SQLCOUNT操作,其速度更快。我們這樣做,資料庫管理員會感激我們的。
清單15.統計記錄數
>>>fromjobs.modelsimportJob
>>>print"Count=",Job.objects.count()#GOOD!
>>>print"Count=",len(Job.objects.all())#BAD!

管理員工具

Django的最大賣點之一是其一流的管理界面。這個工具是按照最終用戶的思路設計的。它為我們的項目提供了很多數據輸入工具。
管理工具是Django提供的一個應用程式。與jobs應用程式一樣,在使用之前也必須進行安裝。第一個步驟是將應用程式的模組(django.contrib.admin)添加到INSTALLED_APPS設定中:
清單16.修改settings.py
INSTALLED_APPS=(
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'djproject.jobs',
'django.contrib.admin',
)
要讓該管理工具可以通過/adminURL使用,只需要簡單地取消項目的urls.py檔案中提供的對應行的內容即可。下一節將詳細介紹URL的配置。
清單17.使管理工具可以通過urls.py使用
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^admin/',include('django.contrib.admin.urls.admin')),
)
這個管理應用程式有自己的資料庫模型,但也需要進行安裝。我們可以再次使用syncdb命令來完成這個過程:
pythonmanage.pysyncdb
要查看這個管理工具,可以使用Django提供的測試伺服器。
清單18.使用測試伺服器來查看管理工具
~/dev/djproject$pythonmanage.pyrunserver
Validatingmodels...
0errorsfound.
Djangoversion0.95(post-magic-removal),usingsettings'djproject.settings'
Developmentserverisrunningathttp://127.0.0.1:8000/
QuittheserverwithCONTROL-C(Unix)orCTRL-BREAK(Windows).
現在可以使用http://localhost:8000/admin啟動管理工具,並使用前面創建的超級用戶帳號進行登錄。我們注意到現在還沒有可用的模組。
要讓一個類可以通過管理工具進行訪問,我們需要為其創建一個Admin子類。然後可以通過為這個子類添加類屬性來定製如何對每個類進行管理。清單19展示了如何將Location類添加到這個管理工具中。
清單19.使用管理工具添加Location類
classLocation(meta.Model):
...
classAdmin:
list_display=("city","state","country")
現在就可以通過管理界面來創建、更新和刪除Location記錄了。

設計 URL 方案

DjangoURL分發系統使用了正則表達式配置模組,它可以將URL字元串模式映射為Python方法views。這個系統允許URL與底層代碼完全脫節,從而實現最大的控制和靈活性。
urls.py模組被創建和定義成URL配置的默認起點(通過settings.py模組中的ROOT_URLCONF值)。URL配置檔案的惟一要求是必須包含一個定義模式urlpatterns的對象。
這個職位公告板應用程式會在啟動時打開一個索引和一個詳細視圖,它們可以通過以下的URL映射進行訪問:
/jobs索引視圖:顯示最近的10個職位
/jobs/1詳細視圖:顯示ID為1的職位信息
這兩個視圖(索引視圖和詳細視圖)都是在這個jobs應用程式的views.py模組中實現的。在項目的urls.py檔案中實現這種配置看起來如下所示:
清單21.在djproject/urls.py中實現視圖的配置
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^admin/',include('django.contrib.admin.urls.admin')),
(r'^jobs/$','djproject.jobs.views.index'),
(r'^jobs/(?P<job_id>\d+)/$','djproject.jobs.views.detail'),
)
注意<job_id>部分,這在後面非常重要。
最佳實踐是提取出應用程式特有的URL模式,並將它們放入應用程式自身中。這樣可以取消應用程式與項目的耦合限制,從而更好地實現重用。jobs使用的應用程式級的URL配置檔案如下所示:
清單22.應用程式級的URL配置檔案urls.py
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^$','djproject.jobs.views.index'),
(r'^(?P<job_id>\d+)/$','djproject.jobs.views.detail'),
)
由於view方法現在都是來自同一個模組,因此第一個參數可以使用這個模組的根名稱來指定djproject.jobs.views,Django會使用它來查找index方法和detail方法:
清單23.jobs/urls.py:查找index和detail方法
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('djproject.jobs.views',
(r'^$','index'),
(r'^(?P<object_id>\d+)/$','detail'),
)
嘗試上面的jobsURL會返回到這個項目中,因為它們是使用include函式將其作為一個整體來實現的。應用程式級的URL被綁定到下面的/jobs部分:
清單24.djproject/urls.py:將URL送回該項目
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^admin/',include('django.contrib.admin.urls.admin')),
(r'^jobs/',include('djproject.jobs.urls')),
)
如果現在嘗試使用測試伺服器來訪問索引頁(http://localhost:8000/jobs),會得到一個錯誤,因為正在調用的視圖(djproject.jobs.views.index)不存在。

實現視圖

視圖是一個簡單的Python方法,它接受一個請求對象,負責實現:
任何業務邏輯(直接或間接)
上下文字典,它包含模板數據
使用一個上下文來表示模板
回響對象,它將所表示的結果返回到這個框架中
在Django中,當一個URL被請求時,所調用的Python方法稱為一個視圖(view),這個視圖所載入並呈現的頁面稱為模板(template)。由於這個原因,Django小組將Django稱為一個MVT(model-view-template)框架。另一方面,TurboGears把自己的方法稱作控制器(controller),將所呈現的模板稱為視圖(view),因此縮寫也是MVC。其區別在於廣義的語義,因為它們所實現的內容是相同的。
最簡單的視圖可能會返回一個使用字元串初始化過的HttpResponse對象。創建下面的方法,並生成一個/jobsHTTP請求,以確保urls.py和views.py檔案都已經正確設定。
清單25.jobs/views.py(v1)
fromdjango.utils.httpwrappersimportHttpResponse
defindex(request):
returnHttpResponse("JobIndexView")
下面的代碼將獲取最近的10個職位,並通過一個模板呈現出來,然後返迴響應。沒有下一節中的模板檔案,這段代碼就無法正常工作。
清單26.jobs/views.py(v2)
fromdjango.templateimportContext,loader
fromdjango.httpimportHttpResponse
fromjobs.modelsimportJob
fromdjango.templateimportContext,loader
fromdjango.httpimportHttpResponse
fromjobs.modelsimportJob
defindex(request):
object_list=Job.objects.order_by('-pub_date')[:10]
t=loader.get_template('jobs/job_list.html')
c=Context({
'object_list':object_list,
})
returnHttpResponse(t.render(c))
在上面的代碼中,模板是由jobs/job_list.html字元串進行命名的。該模板是使用名為object_list的職位列表的上下文呈現的。所呈現的模板字元串隨後被傳遞到HTTPResponse構造器中,後者通過這個框架被傳送回請求客戶機那裡。
載入模板、創建內容以及返回新回響對象的步驟在下面都被render_to_response方法取代了。新增內容是詳細視圖方法使用了一個get_object_or_404方法,通過該方法使用所提供的參數獲取一個Job對象。如果沒有找到這個對象,就會觸發404異常。這兩個方法減少了很多Web應用程式中的樣板代碼。
清單27.jobs/views.py(v3)
fromdjango.shortcutsimportget_object_or_404,render_to_response
fromjobs.modelsimportJob
defindex(request):
object_list=Job.objects.order_by('-pub_date')[:10]
returnrender_to_response('jobs/job_list.html',
{'object_list':object_list})
defdetail(request,object_id):
job=get_object_or_404(Job,pk=object_id)
returnrender_to_response('jobs/job_detail.html',
{'object':job})
注意,detail使用object_id作為一個參數。這是前面提到過的jobsurls.py檔案中/jobs/URL路徑後面的數字。它以後會作為主鍵(pk)傳遞給get_object_or_404方法。
上面的視圖仍然會失敗,因為它們所載入和呈現的模板(jobs/job_list.htmlandjobs/job_detail.html)不存在。

創建模板

Django提供了一種模板語言,該語言被設計為能夠快速呈現且易於使用。Django模板是利用{{variables}}和{%tags%}中嵌入的文本創建的。變數會使用它們表示的值進行計算和替換。標記用來實現基本的控制邏輯。模板可以用來生成任何基於文本的格式,包括HTML、XML、CSV和純文本。
第一個步驟是定義將模板載入到什麼地方。為了簡便起見,我們需要在djproject下面創建一個templates目錄,並將這個路徑添加到settings.py的TEMPLATE_DIRS條目中:
清單28.在settings.py中創建一個templates目錄
TEMPLATE_DIRS=(
'/path/to/devdir/djproject/templates/',
)
Django模板支持稱為模板繼承(templateinheritance)的概念,它允許站點設計人員創建一個統一的外表,而不用替換每個模板的內容。我們可以通過使用塊標記定義骨幹文檔或基礎文檔來使用繼承。這些塊標記都是使用一些包含內容的頁面模板來填充的。這個例子給出了一個包含稱為title、extrahead和content的塊的HTML骨幹:
清單29.骨幹文檔templates/base.html
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"lang="en">
<head>
<title>CompanySite:{%blocktitle%}Page{%endblock%}</title>
{%blockextrahead%}{%endblock%}
</head>
<body>
{%blockcontent%}{%endblock%}
</body>
</html>
為了取消應用程式與項目之間的耦合,我們使用了一個中間基本檔案作為Job應用程式所有頁面檔案的基礎。對於這個例子來說,為了簡便起見,我們將應用程式的CSS放到這個基本檔案中。在實際的應用程式中,需要有一個正確配置的Web伺服器,將這個CSS提取出來,並將其放到Web伺服器所服務的靜態檔案中。
清單30.中間基礎檔案templates/jobs/base.html
{%extends"base.html"%}
{%blockextrahead%}
<style>
body{
font-style:Arial;
}
h1{
text-align:center;
}
.job.title{
font-size:120%;
font-weight:bold;
}
.job.posted{
font-style:italic;
}
</style>
{%endblock%}
默認情況下,Django測試伺服器並不會為靜態檔案提供服務,因為這是Web伺服器的工作。但是在開發過程中,如果您希望Django可以提供圖像、樣式表等,那么請參閱參考資料中有關如何激活這個特性的連結。
現在我們要創建視圖所載入並呈現的兩個頁面模板。jobs/job_list.html模板簡單地循環遍歷object_list,它通過索引視圖遍歷其內容,並顯示一個到每條記錄的詳細頁面的連結。
清單31.templates/jobs/job_list.html模板
{%extends"jobs/base.html"%}
{%blocktitle%}JobList{%endblock%}
{%blockcontent%}
<h1>JobList</h1>
<ul>
{%forjobinobject_list%}
<li><ahref="{{job.id}}">{{job.job_title}}</a></li>
{%endfor%}
</ul>
{%endblock%}
jobs/job_detail.html頁面會顯示一條稱為job的記錄:
清單32.templates/jobs/job_detail.html頁面
{%extends"jobs/base"%}
{%blocktitle%}JobDetail{%endblock%}
{%blockcontent%}
<h1>JobDetail</h1>
<divclass="job">
<divclass="title">
{{job.job_title}}
-
{{job.location}}
</div>
<divclass="posted">
Posted:{{job.pub_date|date:"d-M-Y"}}
</div>
<divclass="description">
{{job.job_description}}
</div>
</div>
{%endblock%}
Django模板語言已經被設計為只能實現有限的功能。這種限制可以為非程式設計師保持模板的簡單性,同時還可以讓程式設計師不會將業務邏輯放到不屬於自己的地方,即表示層。請參閱參考資料中模板語言文檔的連結。

通用視圖

Django提供了4種通用視圖(genericview),它們可以讓開發人員創建遵循典型模式的應用程式:
頁面列表/詳細頁面(與上面的例子類似)
基於數據的記錄分類(對於新聞或blog站點非常有用)
對象的創建、更新和刪除(CRUD)
簡單直接的模板表示或簡單地對HTTP重新進行定向
我們沒有創建樣板視圖方法,而是將所有的業務邏輯都放入了urls.py檔案中,它們都由Django提供的通用視圖進行處理。
清單33.jobs/urls.py中的通用視圖
fromdjango.conf.urls.defaultsimport*
fromjobs.modelsimportJob
info_dict={
'queryset':Job.objects.all(),
}
urlpatterns=patterns('django.views.generic.list_detail',
(r'^$','object_list',info_dict),
(r'^(?P<object_id>\d+)/$','object_detail',info_dict),
)
這個urls.py檔案中的3個主要變化如下:
info_dict映射對象會為要訪問的Job提供一個查詢集。
它使用了django.views.generic.list_detail,而不是djproject.jobs.views。
真正的視圖調用是object_list和object_detail。
這個項目需要遵循一些要求才能讓通用視圖自動工作:
通用詳細視圖期望獲得一個object_id參數。
模板遵循下面的命名模式:app_label/model_name_list.html(jobs/job_list.html)app_label/model_name_detail.html(jobs/job_detail.html)
列表模板處理一個名為object_list的列表。
詳細模板處理一個名為object的對象。
更多選項可以通過info_dict來傳遞,其中包括指定每個頁面中對象個數的paginate_by值。

卡通人物

DjangoDjango

英文名稱:Django
中文名稱:
Django(大陸)
Django(台灣)
Django(香港)
首次登場:2007年6月29日 《料理鼠王》
角色性格:執著聰明

Django是 Remy 的爸爸,也是老鼠部落中的老家長。對於長子 Remy 他報有很高希望,希望兒子可以繼承他的“事業”讓老鼠家族發揚光大,但是 Remy 卻讓他的希望落空,他無法理解兒子去餐館到處亂逛的行為,因為在他看來“人類=死亡”。

角色配音:Brian Dennehy(英文)

經典西部影片

中文名稱:《姜戈》或《迪亞戈》
英文名稱:Django
年份:1966
導演:塞吉奧•考布西
主演:弗蘭克•涅羅

簡介

1966年,義大利西部片已經蔚然成風,名導倍出,流派紛呈。塞吉奧•考布西("另一個塞吉奧",此時他已經執導了幾部西部片)導演了傲視同儕的《迪亞戈》,這部電影不僅將復仇的動機引入到義大利西部片劇情中來,同時也將暴力提升前所未有的程度(這導致本片在幾個市場被禁)。
隨後殘忍而密集的射殺成為義大利西部片的例行公事,導致評論家們忽略了一些本來相當出色的電影。GiulioQuesti執導、TomasMilian主演的超現實主義電影《迪亞戈,殺!》就被認為是最殘忍同時也是最詭異的義大利西部片,充滿了屈辱、折磨、吸血蝙蝠、刑囚,以及一支同性戀匪徒大軍。
《迪亞戈》衍生了30多部續作,儘管只有一部是正式的。

背景

義大利西部片是西部片的子類型,是20世紀60年代初到70年代中期歐洲國家出品的一批西部片的統稱。1960年到1975年之間,歐洲電影公司拍攝了近600部西部片,對這些電影,美國評論家們不是猛烈抨擊就是刻意忽視,由於大多數影片是由義大利公司投資拍攝,又因在這些歐洲西部片中,以義大利的西部片影響最大,他們被戲稱為"意大利麵西部片",同時"義大利西部片"也用來指由歐洲大陸電影工作者投資拍攝的西部片。
歐洲人一向熱愛西部片,也一向拍攝西部片。早在1901年,歐洲導演就已經在這種最美國化的藝術類型上小試身手。不過相對來講,直到1960年歐洲西部片製作數量還是很少,儘管有其歷史淵源,但是卻並未形成潮流,也並不廣為人知。歐洲大陸的觀眾也更愛從美國西部片中尋找樂趣。
到1960年,受市場壓力所迫,美國西部片的產量日益減少,而由於發行問題,這些影片在歐洲也難得一見。這樣,歐洲製片商開始嘗試製作本土西部片,其多為西班牙佐羅打鬥劇和美國B級西部片的劣質仿效品。唯一例外是MichaelCarreras導演、西班牙投資拍攝的《野蠻之槍》,由RichardBasehart和AlexNichol主演,這部電影證明,雖非全然原創、製作精良的西部片,也依然可以盛開於異國他鄉。當然,大多數同類電影仍然乏善可陳,只能勉強有立足之地,搖搖欲墜,不堪一擊。

相關詞條

相關搜尋

熱門詞條

聯絡我們