django-admin管理后台高級自定義


django自帶的admin后台管理系統,在很多網站中被稱為django的殺手級的應用。那么django-admin的適用情形倒底有哪些呢,一般 來說對於大型的商業性的項目通常不用采用django-admin來做為后台管理框架系統,通常的做法是通過權限控制在前台以不同的模板頁的風格來區別是前台功能還是后台功能,或者是建立一個獨立的后台管理系統。那是不是說django-admin在國內就沒有市場了呢,事實上並不是,對於一些小微企業或創業公司,或者項目比較緊急的時候通常會采用django-admin來作為后台系統

 

django-admin中進行定制化開發主要關注兩部分內容:

UserAdmin

ModelAdmin

通過對這兩個類進行子類化的方式來實現一些簡單功能的定制

 

首先如果要對admin進行定制,需要將建立好的模型導入到admin模塊之 中,然后在admin中注冊該模塊,如下所示:

class xxoo(models.Model):

      pass

在admin文件中配置

from django.contrib import admin

from models import xxoo

注冊:

admin.site.register(xxoo)

在django中本身支持本地化的語言顯示,如需要把界面轉變為中文的話需要在配置文件中添加以下配置MiDDLEWARE_CLASSES的SessionMiddleware下

    django.middleware.locale.localeMiddleware

如果對於界面中用戶信息的展示,不想全部顯示或是想自定義顯示可以通過自定義UserAdmin來實現

from django.contrib import admin
from models import xxoo
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
例:只顯示以下幾個字段,可以通過子類化來實現
class MyUserAdmin(UserAdmin):
     list_display=('email','first_name','last_name')
同時由於user會注冊到admin中,所以在定制化時需要先反注冊
admin.site.unregister(user)
然后將user注冊到MyUserAdmin中
admin.site.register(User,MyUserAdmin)

對於界面右側的過濾器的自定義:如果只想過濾其中一個屬性,如是否是職員:
可以在MyUserAdmin中加入以下代碼:

List_filter=('is_staff',)


對於搜索的自定義,默認情況下django搜索所有字段,只要檢索到某一字段包含所搜索的內容就會被搜索到,如果想自定義搜索的字段可以在MyUserAdmin中加入以下代碼

search_fields=('last_name',)



如何顯示自定義的模型在網站中的顯示,如xxoo

同樣是通過子類化來實現

在admin中注冊poem

子類化ModelAdmin
class PoemModelAdmin(admin.ModelAdmin):
     List_display=('email','first_name','last_name')
     class Meta:
        mode=Poem
admin.site.register(Poem,PoemModelAdmin)


給字段添加link查看信息,如想查看author的信息,通過以下設置后在頁面中該 字段將變為一個a標簽,點擊時將帶出相應的信息
List_display_links=['author',]
刷新頁面后點擊將字段標簽查看

對於新注冊的model默認情況下是沒有搜索功能的,如果想加入搜索功能,可以在代碼中加入以下代碼
   search_fields=('last_name',)

如果想使一個字段可以編輯,可以在代碼中加入以下代碼

List_editable=['title']

django中規定:一個字段不能同時可鏈接可編輯

對於admin后台界面的定制化,可以通過自定義template來實現
在代碼中加入以下代碼
change_form_template='xxx.html'

xxx.html的內容如下,繼承change_form.html   template目錄下
{%extends 'admin/change_form.html'%}
{%block form_top%}
內容
{%endblock%}

 

widget用來定義顯示風格,如顯示為textbox,dropdownlist等

如果想修改一個字段的顯示風格可以做以下設置

from django.contrib.auth.admin import Useradmin
from django.contrib.auth.models import User
from django import forms
from django.utils.safestring import mark_safe
from django.template.loader import rend_to_string
from models import xxoo
class PoemForm(forms.ModelForm):
     class Meta:
        model=xxoo
        fields=['author','title']
        widgets={
              'author':forms.Textarea(attrs={'cols':'20','rows':'1'})
 }

通過以上設置即將author字段設置為textarea樣式,同時設置了它的一些屬性

設置css樣式:

在static文件夾中新建xxx.css
在代碼中做以下設置
class SubInputText(forms.TextInput):
     class Media:
        css={
                 'all':('input.css',)
            }


class PoemForm(forms.ModelForm):
     class Meta:
        model=xxoo
        fields=['author','title']
        widgets={
              'author':forms.Textarea(attrs={'cols':'20','rows':'1'}),
              'title':SubInputText(),#設置css
              'type':forms.RadioSelect  將type字段設置為radiobutton樣式
 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM