歡迎您光臨本站 註冊首頁
  
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。


清單 1. 在 urls.py 中啟用 admin
				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 V1.0.2
  • SQLite V3
  • Python V2.4-2.6(Django 尚不支持 Python V3)
  • IPython(用作樣例輸出)

Django Object-Relational Mapper (ORM) 支持許多資料庫後端,但是 SQLite 是最簡單的安裝方式,許多操作系統都附帶 SQLite。這些樣例也適用於其他後端。有關 Django 支持的資料庫列表,請參見 參考資料。

Django 提供一個快速方式,可以使用獨立代碼設置工作環境:運行 python manage.py shell。本文中的所有代碼樣例都假設已經調用了該環境。在 Django lingo 中,假設如下:

  • 這是一個名為 more_with_admin 的 Django 項目。
  • more_with_admin 項目包含一個名為 examples 的應用程序。

examples 應用程序模擬基本的類博客文檔系統,這些文檔中還有多個評論(或沒有)。所有命令行樣例都來自 project root —— more_with_admin 主目錄。

您還需要將 django.contrib.admin 應用程序添加到 settings.INSTALLED_APPS。

在繼續下一步前,建議計劃擴展 admin 的用戶熟悉一下源代碼。對於支持快捷鍵和符號鏈接的操作系統,創建一個指向 admin 應用程序的快捷鍵或符號鏈接會很有用。

admin 包含在 Django 包中。假如已經使用安裝工具安裝了 admin,則它位於 django/contrib/admin 下的 site-packages 中。以下是一個項目到 Django admin 源的符號鏈接樣例,您可以根據操作系統和 Django 安裝的位置定製,以便更輕鬆的複製和引用:


$ ln -s /path/to/Python/install/site-packages/django/contrib/admin admin-source

admin.autodiscover() 方法迭代設置 .INSTALLED_APPS 中的每個應用程序,並查找名為 admin.py 的文件。該文件通常位於應用程序目錄的最上方,與 models.py 級別一樣。

樣例應用程序需要清單 2 中提供的 models.py。相應的 admin.py 如下所示。


清單 2. 該應用程序的樣例 models.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 屏幕,如下所示。


圖 1. 基本的 Django admin 屏幕


更改 admin.py 中的代碼

與 Django 應用程序中的其他文件不同,如果使用 Django 開發 Web 伺服器更改 admin.py,您可能需要手動重啟伺服器。

注意,您的模型現在尚不可用,因為您還沒有創建 admin.py。清單 3 展示的代碼讓您能在 admin 中使用模型。


清單 3. 樣例 admin.py
				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 中重載主頁,您將看到可用的新模型,如下所示。


圖 2. 可以支持定製模型的 Django admin






定製 admin 模型頁面

admin 文件夾中的目錄名稱

注意,我使用模型的小寫名稱。這與生成 URL 時處理普通 admin 頁面的方式是一致的。Django 調用支持 URL 的表格 slugs。如果您不確定給定的模型應該使用哪個 slug,可以在創建目錄之前先瀏覽 admin 並留意出現在 URL 中的名稱。

理解在不修改 Django 源代碼的情況下如何定製 admin 的關鍵在於,記住 admin 像其他程序一樣只是一個普通的 Django 應用程序。最重要的一點是,這意味著可以使用 Django 模版繼承系統。

Django 的模版搜索順序總是將您自己項目的模版排在其他系統之前。此外,admin 在恢復到默認情況前,會嘗試搜索匹配每個模型的硬編碼模版。這為輕鬆定製提供了一個擴展點。

首先,確保 Django 通過編輯項目的 settings.py 來查看您的模版目錄。


清單 4. 編輯 settings.py 以查看模版目錄
				  TEMPLATE_DIRS = (      "/path/to/project/more_with_admin/templates",      "/path/to/project/more_with_admin/examples/templates",  )


[火星人 ] 利用 Django admin 完成更多任務 定製符合您需求的強大應用程已經有795次圍觀

http://coctec.com/docs/linux/show-post-68845.html