Django 提供的內置管理控制台是該產品最大的賣點之一。假如您要定製外觀和模型欄位以外的東西,應該怎麼辦呢?查看本文了解如何在不修改源程序的情況下擴展現有管理應用程序。
Django admin
Django 為未來的開發人員提供了許多功能:一個成熟的標準庫,一個活躍的用戶社區,以及 Python 語言的所有好處。雖然其他 Web 框架也聲稱能提供同樣的內容,但 Django 的獨特之處在於它內置了管理應用程序 —— admin。
admin 提供了開箱即用的高級 Create-Read-Update-Delete (CRUD) 功能,減少了重複工作所需的時間。這是許多 Web 應用程序的關鍵所在,程序員可以在開發時快速瀏覽他們的資料庫模型;非技術最終用戶可以在部署時使用 admin 添加和編輯站點內容。
在現實中,總需要執行某些定製操作。關於 admin 外觀的基本情況,Django 文檔提供許多指南,Django 自身也包含了一些簡單的方法用來改寫 admin 行為的子集。如果您需要更多功能怎麼辦呢?從哪裡開始著手呢?本文將指導您如何進行一些高級 adimin 定製。
admin 快速瀏覽
大多數 Django 開發人員都很熟悉 admin 的默認功能。讓我們快速回顧一下,首先編輯頂級 urls.py 啟用 admin,見清單 1。
from django.conf.urls.defaults import * # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Uncomment the next line to enable the admin: (r'^admin/(.*)', admin.site.root), ) |
|
您還需要將 django.contrib.admin 應用程序添加到 settings.INSTALLED_APPS。
在繼續下一步前,建議計劃擴展 admin 的用戶熟悉一下源代碼。對於支持快捷鍵和符號鏈接的操作系統,創建一個指向 admin 應用程序的快捷鍵或符號鏈接會很有用。
admin 包含在 Django 包中。假如已經使用安裝工具安裝了 admin,則它位於 django/contrib/admin 下的 site-packages 中。以下是一個項目到 Django admin 源的符號鏈接樣例,您可以根據操作系統和 Django 安裝的位置定製,以便更輕鬆的複製和引用:
admin.autodiscover() 方法迭代設置 .INSTALLED_APPS 中的每個應用程序,並查找名為 admin.py 的文件。該文件通常位於應用程序目錄的最上方,與 models.py 級別一樣。
樣例應用程序需要清單 2 中提供的 models.py。相應的 admin.py 如下所示。
from django.db import models class Document(models.Model): '''A Document is a blog post or wiki entry with some text content''' name = models.CharField(max_length=255) text = models.TextField() def __unicode__(self): return self.name class Comment(models.Model): '''A Comment is some text about a given Document''' document = models.ForeignKey(Document, related_name='comments') text = models.TextField() |
現在,您可以通過運行 Django 開發伺服器調用 admin:
python manage.py runserver |
admin 可從默認位置 http://localhost:8000/admin/ 獲取。登錄之後,您可以看到基本的 admin 屏幕,如下所示。
|
注意,您的模型現在尚不可用,因為您還沒有創建 admin.py。清單 3 展示的代碼讓您能在 admin 中使用模型。
from django.contrib import admin from more_with_admin.examples import models class DocumentAdmin(admin.ModelAdmin): pass class CommentAdmin(admin.ModelAdmin): pass admin.site.register(models.Document, DocumentAdmin) admin.site.register(models.Comment, CommentAdmin) |
現在如果您在 admin 中重載主頁,您將看到可用的新模型,如下所示。
定製 admin 模型頁面
|
理解在不修改 Django 源代碼的情況下如何定製 admin 的關鍵在於,記住 admin 像其他程序一樣只是一個普通的 Django 應用程序。最重要的一點是,這意味著可以使用 Django 模版繼承系統。
Django 的模版搜索順序總是將您自己項目的模版排在其他系統之前。此外,admin 在恢復到默認情況前,會嘗試搜索匹配每個模型的硬編碼模版。這為輕鬆定製提供了一個擴展點。
首先,確保 Django 通過編輯項目的 settings.py 來查看您的模版目錄。
TEMPLATE_DIRS = ( "/path/to/project/more_with_admin/templates", "/path/to/project/more_with_admin/examples/templates", ) |
[火星人 ] 利用 Django admin 完成更多任務 定製符合您需求的強大應用程已經有795次圍觀