共找到2條詞條名為DJANGO的結果 展開

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
Django
django logo
Django 根據比利時的爵士音樂家Django Reinhardt命名,他是一個吉普賽人,主要以演奏吉它為主,還演奏過小提琴等。
設計哲學 Django的主要目的是簡便、快速的開發資料庫驅動的網站。它強調代碼復用,多個組件可以很方便的以“插件”形式服務於整個框架,Django有許多功能強大的第三方插件,你甚至可以很方便的開發出自己的工具包。這使得Django具有很強的可擴展性。它還強調快速開發和DRY(Do Not Repeat Yourself)原則。 Django基於MTV的設計十分優美:對象關係映射 (ORM,object-relational mapping) 以Python類形式定義你的數據模型,ORM將模型與關係資料庫連接起來,你將得到一個非常容易使用的資料庫API,同時你也可以在Django中使用原始的SQL語句。 URL 分派 使用正則表達式匹配URL,你可以任意設計的URL,沒有框架的特定限定。象你喜歡的一樣靈活。模版系統 使用Django強大而可擴展的模板語言,可以分隔設計、內容和Python代碼。並且具有可繼承性。表單處理 你可以方便的生成各種表單模型,實現表單的有效性檢驗。可以方便的從你定義的模型實例生成相應的表單。Cache系統 可以掛在內存緩衝或其它的框架實現超級緩衝 -- 實現你所需要的粒度。會話(session),用戶登錄與許可權檢查 快速開發用戶會話功能。國際化 內置國際化系統,方便開發出多種語言的網站。自動化的管理界面 不需要你花大量的工作來創建人員管理和更新內容。Django自帶一個ADMIN site,類似於內容管理系統。
安裝 Django 本文使用了 Django 的開發版本,以便能夠利用 Django 框架的最新改進。建議您在 0.95 版正式發布之前使用這個版本。關於最新發行版本,請參閱 Django 的 Web 站點(再次請您參閱 參考資料 來獲得鏈接)。按照以下步驟下載並安裝 Django:清單 1. 下載並安裝 Django ~/downloads# svn co http://code.djangoproject.com/svn/django/trunk/ django_src ~/downloads# cd django_src ~/downloads# python setup.py install
Django 管理工具 在安裝 Django 之後,您現在應該已經有了可用的管理工具 django-admin.py。清單 2 給出了這個管理工具中可以使用的一些命令:清單 2. 使用 Django 管理工具 ~/dev$ django-admin.py usage: django-admin.py action [options] actions: adminindex [modelmodule ...] Prints the admin-index template snippet for the given model module name(s). ... snip ... startapp [appname] Creates a Django app directory structure for the given app name in the current directory. startproject [projectname] Creates a Django project directory structure for the given project name in the current directory. validate Validates all installed models. options: -h, --help show this help message and exit --settings=SETTINGS Python path to settings module, e.g. "myproject.settings.main". If this isn't provided, the DJANGO_SETTINGS_MODULE environment variable will be used. --pythonpath=PYTHONPATH Lets you manually add a directory the Python path, e.g. "/home/djangoprojects/myproject".
Django 項目和應用程序 要啟動 Django 項,請使用 django-admin startproject 命令,如下所示:清單 3. 啟動項目 ~/dev$ django-admin.py startproject djproject 上面這個命令會創建一個 djproject 目錄,其中包含了運行 Django 項目所需要的基本配置文件:清單 4. djproject 目錄的內容 __init__.py manage.py settings.py urls.py 對於這個項目來說,我們要構建一個職位公告板應用程序“jobs”。要創建應用程序,可以使用 manage.py 腳本,這是一個特定於項目的 django-admin.py 腳本,其中 settings.py 文件可以自動提供:清單 5. 使用 manage.py startapp ~/dev$ cd djproject ~/dev/djproject$ python manage.py startapp jobs 這將創建一個應用程序骨架,其中模型有一個 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-relational mapper,ORM)庫,它可以通過 Python 對象介面支持動態資料庫訪問。這個 Python 介面非常有用,功能十分強大,但如果需要,也可以靈活地不使用這個介面,而是直接使用 SQL。 ORM 目前提供了對 PostgreSQL、MySQL、SQLite 和 Microsoft® SQL 資料庫的支持。這個例子使用 SQLite 作為後台資料庫。SQLite 是一個輕量級資料庫,它不需要進行任何配置,自身能夠以一個簡單文件的形式存在於磁碟上。要使用 SQLite,可以簡單地使用 setuptools 來安裝 pysqlite(有關 setuptools 的更多資料,尤其是有關 easy_install 工具(需要單獨安裝)的資料,請參閱 參考資料): easy_install pysqlite 在使用這個模型之前,需要在設置文件中對資料庫進行配置。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 和 publish date 欄位。清單 9. jobs/models.py 模塊 from django.db import models class Location(models.Model): city = models.CharField(maxlength=50) state = models.CharField(maxlength=50, null=True, blank=True) country = models.CharField(maxlength=50) def __str__(self): if self.state: return "%s, %s, %s" % (self.city, self.state, self.country) else: return "%s, %s" % (self.city, self.country) class Job(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.py sql 命令查看資料庫模式 ~/dev/djproject$ python manage.py sql jobs BEGIN; CREATE TABLE "jobs_job" ( "id" integer NOT NULL PRIMARY KEY, "pub_date" date NOT NULL, "job_title" varchar(50) NOT NULL, "job_description" text NOT NULL, "location_id" integer NOT NULL ); CREATE TABLE "jobs_location" ( "id" integer NOT NULL PRIMARY KEY, "city" varchar(50) NOT NULL, "state" varchar(50) NULL, "country" varchar(50) NOT NULL ); COMMIT; 為了初始化並安裝這個模型,請運行資料庫命令 syncdb: ~/dev/djproject$ python manage.py syncdb 注意,syncdb 命令要求我們創建一個超級用戶帳號。這是因為 django.contrib.auth 應用程序(提供基本的用戶身份驗證功能)默認情況下是在 INSTALLED_APPS 設置中提供的。超級用戶名和密碼用來登錄將在下一節介紹的管理工具。記住,這是 Django 的超級用戶,而不是系統的超級用戶。
查詢集 Django 模型通過默認的 Manager 類 objects 來訪問資料庫。例如,要列印所有 Job 的列表,則應該使用 objects 管理器的 all 方法:清單 11. 列印所有的職位 >>> from jobs.models import Job >>> for job in Job.objects.all(): ... print job Manager 類還有兩個過濾方法:一個是 filter,另外一個是 exclude。過濾方法可以接受滿足某個條件的所有方法,但是排除不滿足這個條件的其他方法。下面的查詢應該可以給出相同的結果(“gte”表示“大於或等於”,而“lt”表示“小於”)。清單 12. 排除和過濾職位 >>> from jobs.models import Job >>> from datetime import datetime >>> 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. 對職位進行更多的排除和過濾 >>> from jobs.models import Job >>> from datetime import datetime >>> 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 分片 >>> from jobs.models import Job >>> for job in Job.objects.all()[5:15] ... print job 注意:使用 count 方法可以確定一個 QuerySet 中有多少記錄。Python 的 len 方法會進行全面的計算,然後統計那些以記錄形式返回的行數,而 count 方法執行的則是真正的 SQL COUNT 操作,其速度更快。我們這樣做,資料庫管理員會感激我們的。清單 15. 統計記錄數 >>> from jobs.models import Job >>> 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', ) 要讓該管理工具可以通過 /admin URL 使用,只需要簡單地取消項目的 urls.py 文件中提供的對應行的內容即可。下一節將詳細介紹 URL 的配置。清單 17. 使管理工具可以通過 urls.py 使用 from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^admin/', include('django.contrib.admin.urls.admin')), ) 這個管理應用程序有自己的資料庫模型,但也需要進行安裝。我們可以再次使用 syncdb 命令來完成這個過程: python manage.py syncdb 要查看這個管理工具,可以使用 Django 提供的測試伺服器。清單 18. 使用測試伺服器來查看管理工具 ~/dev/djproject$ python manage.py runserver Validating models... 0 errors found. Django version 0.95 (post-magic-removal), using settings 'djproject.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C (Unix) or CTRL-BREAK (Windows). 現在可以使用 http://localhost:8000/admin 啟動管理工具,並使用前面創建的超級用戶帳號進行登錄。我們注意到現在還沒有可用的模塊。要讓一個類可以通過管理工具進行訪問,我們需要為其創建一個 Admin 子類。然後可以通過為這個子類添加類屬性來定製如何對每個類進行管理。清單 19 展示了如何將 Location 類添加到這個管理工具中。清單 19. 使用管理工具添加 Location 類 class Location(meta.Model): ... class Admin: list_display = ("city", "state", "country") 現在就可以通過管理界面來創建、更新和刪除 Location 記錄了。
設計 URL 方案 Django URL 分發系統使用了正則表達式配置模塊,它可以將 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 中實現視圖的配置 from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^admin/', include('django.contrib.admin.urls.admin')), (r'^jobs/$', 'djproject.jobs.views.index'), (r'^jobs/(?P\d+)/$', 'djproject.jobs.views.detail'), ) 注意  部分,這在後面非常重要。最佳實踐是提取出應用程序特有的 URL 模式,並將它們放入應用程序自身中。這樣可以取消應用程序與項目的耦合限制,從而更好地實現重用。jobs 使用的應用程序級的 URL 配置文件如下所示:清單 22. 應用程序級的 URL 配置文件 urls.py from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^$', 'djproject.jobs.views.index'), (r'^(?P\d+)/$', 'djproject.jobs.views.detail'), ) 由於 view 方法現在都是來自同一個模塊,因此第一個參數可以使用這個模塊的根名稱來指定 djproject.jobs.views,Django 會使用它來查找 index 方法和 detail 方法:清單 23. jobs/urls.py:查找 index 和 detail 方法 from django.conf.urls.defaults import * urlpatterns = patterns('djproject.jobs.views', (r'^$', 'index'), (r'^(?P\d+)/$', 'detail'), ) 嘗試上面的 jobs URL 會返回到這個項目中,因為它們是使用 include 函數將其作為一個整體來實現的。應用程序級的 URL 被綁定到下面的 /jobs 部分:清單 24. djproject/urls.py:將 URL 送回該項目 from django.conf.urls.defaults import * 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 對象。創建下面的方法,並生成一個 /jobs HTTP 請求,以確保 urls.py 和 views.py 文件都已經正確設置。清單 25. jobs/views.py (v1) from django.utils.httpwrappers import HttpResponse def index(request): return HttpResponse("Job Index View") 下面的代碼將獲取最近的 10 個職位,並通過一個模板呈現出來,然後返迴響應。沒有 下一節 中的模板文件,這段代碼就無法 正常工作。清單 26. jobs/views.py (v2) from django.template import Context, loader from django.http import HttpResponse from jobs.models import Job from django.template import Context, loader from django.http import HttpResponse from jobs.models import Job def index(request): object_list = Job.objects.order_by('-pub_date')[:10] t = loader.get_template('jobs/job_list.html') c = Context({ 'object_list': object_list, }) return HttpResponse(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) from django.shortcuts import get_object_or_404, render_to_response from jobs.models import Job def index(request): object_list = Job.objects.order_by('-pub_date')[:10] return render_to_response('jobs/job_list.html', {'object_list': object_list}) def detail(request, object_id): job = get_object_or_404(Job, pk=object_id) return render_to_response('jobs/job_detail.html', {'object': job}) 注意,detail 使用 object_id 作為一個參數。這是前面提到過的 jobs urls.py 文件中 /jobs/ URL 路徑後面的數字。它以後會作為主鍵(pk)傳遞給 get_object_or_404 方法。上面的視圖仍然會失敗,因為它們所載入和呈現的模板(jobs/job_list.html and jobs/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 模板支持稱為模板繼承(template inheritance)的概念,它允許站點設計人員創建一個統一的外表,而不用替換每個模板的內容。我們可以通過使用塊標記定義骨幹文檔或基礎文檔來使用繼承。這些塊標記都是使用一些包含內容的頁面模板來填充的。這個例子給出了一個包含稱為 title、extrahead 和 content 的塊的 HTML 骨幹:清單 29. 骨幹文檔 templates/base.html Company Site: {% block title %}Page{% endblock %} {% block extrahead %}{% endblock %} {% block content %}{% endblock %} 為了取消應用程序與項目之間的耦合,我們使用了一個中間基本文件作為 Job 應用程序所有頁面文件的基礎。對於這個例子來說,為了簡便起見,我們將應用程序的 CSS 放到這個基本文件中。在實際的應用程序中,需要有一個正確配置的 Web 伺服器,將這個 CSS 提取出來,並將其放到 Web 伺服器所服務的靜態文件中。清單 30. 中間基礎文件 templates/jobs/base.html {% extends "base.html" %} {% block extrahead %} {% endblock %} 默認情況下,Django 測試伺服器並不會為靜態文件提供服務,因為這是 Web 伺服器的工作。但是在開發過程中,如果您希望 Django 可以提供圖像、樣式表等,那麼請參閱 參考資料 中有關如何激活這個特性的鏈接。現在我們要創建視圖所載入並呈現的兩個頁面模板。jobs/job_list.html 模板簡單地循環遍歷 object_list,它通過索引視圖遍歷其內容,並顯示一個到每條記錄的詳細頁面的鏈接。清單 31. templates/jobs/job_list.html 模板 {% extends "jobs/base.html" %} {% block title %}Job List{% endblock %} {% block content %}

Job List

    {% for job in object_list %}
  • {{ job.job_title }}
  • {% endfor %}
{% endblock %} jobs/job_detail.html 頁面會顯示一條稱為 job 的記錄:清單 32. templates/jobs/job_detail.html 頁面 {% extends "jobs/base" %} {% block title %}Job Detail{% endblock %} {% block content %}

Job Detail

{{ job.job_title }} - {{ job.location }}
Posted: {{ job.pub_date|date:"d-M-Y" }}
{{ job.job_description }}
{% endblock %} Django 模板語言已經被設計為只能實現有限的功能。這種限制可以為非程序員保持模板的簡單性,同時還可以讓程序員不會將業務邏輯放到不屬於自己的地方,即表示層。請參閱 參考資料 中模板語言文檔的鏈接。

通用視圖


Django 提供了 4 種通用視圖(generic view),它們可以讓開發人員創建遵循典型模式的應用程序:頁面列表/詳細頁面(與上面的例子類似)基於數據的記錄分類(對於新聞或 blog 站點非常有用)對象的創建、更新和刪除(CRUD)簡單直接的模板表示或簡單地對 HTTP 重新進行定向 我們沒有創建樣板視圖方法,而是將所有的業務邏輯都放入了 urls.py 文件中,它們都由 Django 提供的通用視圖進行處理。清單 33. jobs/urls.py 中的通用視圖 from django.conf.urls.defaults import * from jobs.models import Job info_dict = { 'queryset': Job.objects.all(), } urlpatterns = patterns('django.views.generic.list_detail', (r'^$', 'object_list', info_dict), (r'^(?P\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 值。
卡通人物
Django
Django
英文名稱:Django 中文名稱:Django(大陸)Django(台灣)Django(香港)首次登場:2007年6月29日 《料理鼠王》 角色性格:執著、聰明Django是 Remy 的爸爸,也是老鼠部落中的老家長。對於長子 Remy 他報有很高希望,希望兒子可以繼承他的“事業”讓老鼠家族發揚光大,但是 Remy 卻讓他的希望落空,他無法理解兒子去餐館到處亂逛的行為,因為在他看來“人類=死亡”。角色配音:Brian Dennehy(英文)經典西部影片 中文名稱:《姜戈》或《迪亞戈》 英文名稱:Django 年份:1966 導演:塞吉奧•考布西 主演:弗蘭克•涅羅簡介 1966年,義大利西部片已經蔚然成風,名導倍出,流派紛呈。塞吉奧•考布西("另一個塞吉奧",此時他已經執導了幾部西部片)導演了傲視同儕的《迪亞戈》,這部電影不僅將復仇的動機引入到義大利西部片劇情中來,同時也將暴力提升前所未有的程度(這導致本片在幾個市場被禁)。隨後殘忍而密集的射殺成為義大利西部片的例行公事,導致評論家們忽略了一些本來相當出色的電影。Giulio Questi執導、Tomas Milian主演的超現實主義電影《迪亞戈,殺!》就被認為是最殘忍同時也是最詭異的義大利西部片,充滿了屈辱、折磨、吸血蝙蝠、刑囚,以及一支同性戀匪徒大軍。 《迪亞戈》衍生了30多部續作,儘管只有一部是正式的。背景 義大利西部片是西部片的子類型,是20世紀60年代初到70年代中期歐洲國家出品的一批西部片的統稱。1960年到1975年之間,歐洲電影公司拍攝了近600部西部片,對這些電影,美國評論家們不是猛烈抨擊就是刻意忽視,由於大多數影片是由義大利公司投資拍攝,又因在這些歐洲西部片中,以義大利的西部片影響最大,他們被戲稱為"義大利面西部片",同時"義大利西部片"也用來指由歐洲大陸電影工作者投資拍攝的西部片。歐洲人一向熱愛西部片,也一向拍攝西部片。早在1901年,歐洲導演就已經在這種最美國化的藝術類型上小試身手。不過相對來講,直到1960年歐洲西部片製作數量還是很少,儘管有其歷史淵源,但是卻並未形成潮流,也並不廣為人知。歐洲大陸的觀眾也更愛從美國西部片中尋找樂趣。到1960年,受市場壓力所迫,美國西部片的產量日益減少,而由於發行問題,這些影片在歐洲也難得一見。這樣,歐洲製片商開始嘗試製作本土西部片,其多為西班牙佐羅打鬥劇和美國B級西部片的劣質仿效品。唯一例外是Michael Carreras導演、西班牙投資拍攝的《野蠻之槍》,由Richard Basehart和Alex Nichol主演,這部電影證明,雖非全然原創、製作精良的西部片,也依然可以盛開於異國他鄉。當然,大多數同類電影仍然乏善可陳,只能勉強有立足之地,搖搖欲墜,不堪一擊。