django實例:建立你的第一個應用投票系統(3)後臺管理

Django的管理面板默認是不開啓的,因此咱們須要進行一些設置工做
一、在INSTALLED_APPS裏面把 django.contrib.admin 前面的註釋去掉
二、運行 css

python manage.py syncdb

,創建和管理有關的表
三、編輯mysite/urls.py文件,設置管理面板的url路由規則 html

複製代碼
from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^如今啓動服務<div class="blockcode"><blockquote>python manage.py runserver
複製代碼

 

訪問http://127.0.0.1:8000/admin/ 會看到管理登陸頁面


輸入用戶名和密碼,就在上一節建立的超級用戶


固然如今仍是看不到咱們添加的投票管理項
在polls目錄下面添加admin.py頁面,內容以下 python

from django.contrib import admin from polls.models import Poll admin.site.register(Poll)

 

django會自動從新加載修改了的文件,但若是是新添加的文件,django是不會加載的,因此須要咱們重啓服務
如今再看看界面


這個是投票列表頁面,基本的what's up 是咱們添加的項


點擊 what's up編輯看看



自定義投票管理表單頁面
如今咱們看到的投票編輯頁面是根據咱們定義的模型自動生成的。如今咱們看看django是如何生成poll管理頁面的。

在剛纔添加的admin.py頁面裏面,用以下內容替換剛纔輸入的 django

class PollAdmin(admin.ModelAdmin): fields = ['pub_date', 'question'] admin.site.register(Poll, PollAdmin)

看看頁面有什麼變化


再來看一個 函數

class PollAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question']}), ('Date information', {'fields': ['pub_date']}), ] admin.site.register(Poll, PollAdmin)

 

這種是給分組了,第一個字段爲每一個 fieldsets 的標頭


django還提供給每個 fieldset設置css類, url

class PollAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question']}), ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), ]

 



如今已經在管理面板中看到poll了,但是它的選項在哪裏?

第一種方法和顯示Poll同樣 spa

from polls.models import Choice admin.site.register(Choice)

 

刷新看看,到添加頁面看看


django默認會把有外鍵的字段用 select下拉框來顯示


如今無論是添加投票項仍是選項都是在單獨的頁面吧,若是要想在投票頁面中直接就能夠添加選項要怎麼辦? code

複製代碼
from django.contrib import admin from polls.models import Choice, Poll class ChoiceInline(admin.StackedInline): model = Choice extra = 3 class PollAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question']}), ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), ] inlines = [ChoiceInline] admin.site.register(Poll, PollAdmin)
複製代碼

 

意思是直接把Choice嵌入到poll管理頁面來編輯,默認添加3個choice,再打開poll 添加頁面看看



如今每次編輯返回查看的時候都會在下面多出3個空的選項,在最下面的一個選項下面有「Add another Choice」,點擊後會在下面自動添加一個選項


修改一下 ChoiceInline看看 orm

class ChoiceInline(admin.TabularInline): #...

 

StackedInline修改成TabularInline


顯示樣式從排列樣式變成了表格樣式。

自定義Poll管理列表顯示樣式

默認狀況下,會列出第個對象的str(),若是要想顯示更多的列就得須要list_display來實現 server

class PollAdmin(admin.ModelAdmin): # ... list_display = ('question', 'pub_date')

 

咱們也把上次自定義添加的函數也加上

class PollAdmin(admin.ModelAdmin): # ... list_display = ('question', 'pub_date', 'was_published_recently')

 



點擊表頭能夠排序,但是was_published_recently這個列卻不會。由於這個如今函數不支持。另外這個列的名字默認就是函數的名稱,顯示的內容就是函數輸出的結果。


再從新編輯一下polls/models.py

複製代碼
class Poll(models.Model): # ... def was_published_recently(self): return self.pub_date >= timezone.now() - datetime.timedelta(days=1) was_published_recently.admin_order_field = 'pub_date' was_published_recently.boolean = True was_published_recently.short_description = 'Published recently?'
複製代碼

 

再次編輯polls/admin.py,在poll管理列表中添加一個過濾面板 在PollAdmin中添加以下代碼

list_filter = ['pub_date']

 



django會根據過濾條件列的類型自動生成一些選項。

還能夠添加上搜索框

search_fields = ['question']

還能夠加上時期類型的選擇

date_hierarchy = 'pub_date'

 

會在數據列表上面加一個分層的日期選項。具體效果能夠運行看看

接着再說一點有關模板的東西吧,若是想把左上角的logo換成咱們本身的要怎麼作呢。
一、在你的項目中新建 templates 目錄
二、把django默認的後面管理模板,按一些的目錄放到咱們新建的templates目錄下面,具體以下設置
在django的的源碼中django/contrib/admin/templates 把admin/base_site.html文件按一樣的目錄複製到新建的templates中即在templates中創建admin子目錄,而後把base_site.html複製到裏面,修改裏面的

Django site admin

 

字符串爲你要的
三、修改配置文件

TEMPLATE_DIRS = ( '/path/to/mysite/templates', # 這裏寫你的目錄,只能是絕對路徑 )

 

明天再繼續,寫一次有點長了,下一篇說說模板了

相關文章
相關標籤/搜索