目錄
1.菜單的自定義頁面實作
2.models代碼
3.adminx代碼
4.template代碼
5.實作效果
6.注意事項
7.背景頁面中分頁實作
1.菜單的自定義頁面實作
此處頁面自定義與我們實作html網頁一樣,都是通過MTV實作(urls+models+adminx+view+template)。不同之處在于,(1)view内的代碼在adminx中實作;(2)url通過adminx注冊生成可點選的菜單;(3)template頁面需要繼承xadmin/base_site.html。
2.models代碼
class Worknews(models.Model):
user = models.ForeignKey(User, verbose_name=u'記錄人', on_delete=models.CASCADE, editable=False,null=True) ## 記錄建立該資料的使用者
start_time = models.DateTimeField(verbose_name=u'添加時間',auto_now_add=True)
type = models.CharField(max_length=20,verbose_name=u'通知類型',choices=(('gsyw',u'公司要聞'),('gzdt',u'工作動态'),('hyzx',u'行業資訊')),default='hyzx')
name = models.CharField(max_length=50,verbose_name=u'通知名稱',default=u'')
content = UEditorField(verbose_name=u'通知内容',width=800, height=600,toolbars='full',
imagePath="Workafter/worknews/", filePath="Workafter/worknews/",
upload_settings={"imageMaxSize":10204000},
settings={},command=None,default='')
class Meta:
verbose_name = u'工作公告'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
3.adminx代碼
from xadmin.views.base import CommAdminView
from .models import Notice_content
class Notice_contentAdmin(object):
# 指向自定義的頁面
object_list_template = 'notice_list.html'
#model_icon = 'fa fa-angle-double-right' # >>圖示
# 重寫方法,把要展示的資料更新到 context
def get_context(self):
context = CommAdminView.get_context(self)
bill_message = Worknews.objects.all()
print(bill_message)
context.update(
{
'title': '最新通知',
'bill_message': bill_message,
}
)
return context
xadmin.site.register(Notice_content, Notice_contentAdmin)
4.template代碼
{# 繼承xadmin的側邊欄和導航欄 #}
{% extends 'xadmin/base_site.html' %}
#去掉标簽欄
{% block content-nav %}
{% endblock %}
{% block content %}
<div style = "height: 700px; width: 45%;margin-left: 20px;margin-top: 20px;margin-right: 20px;z-index: 0;color:brown;background: rgba(191,246,223,0.03)" align="left" >
<h1>最新消息</h1>
{% for i in bill_message %}
<a href="content/{{ i.id }}" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >
<h5>
<div style="width: 95%;margin-left: 20px;margin-top: 20px;z-index: 0;color: black;" >
<div style="float:left">{{ forloop.counter }}、</div>
<div style="float:left">{{ i.name}}</div>
<div align="right">{{ i.start_time}}</div>
</div>
<hr style="height:1px ;background: rgba(83,177,141,0.4)">
</h5>
</a>
{% endfor %}
</div>
{% endblock content %}
5.實作效果
6.注意事項
以上内容為不同之處,在實際應用中不可缺少settings設定和urls配置。
7.背景頁面中分頁實作
(1)xadmin代碼
from xadmin.views.base import CommAdminView
from .models import Applicant_content
from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
from django.http import HttpRequest
class Applicant_contentAdmin(object):
# 指向自定義的頁面
object_list_template = 'operate_list.html'
#model_icon = 'fa fa-angle-double-right' # >>圖示
# 重寫方法,把要展示的資料更新到 context
def get_context(self):
context = CommAdminView.get_context(self)
operate_message = Applicant.objects.all().order_by('-save_time')
try:
page = self.request.GET.get('page',1)
except PageNotAnInteger:
page = 1
p = Paginator(operate_message, 10, request=self.request)
operate_messages = p.page(page)
context.update(
{
'title': '最新通知',
'operate_messages': operate_messages,
}
)
return context
xadmin.site.register(Applicant_content, Applicant_contentAdmin)
(2)models代碼
{# 繼承xadmin的側邊欄和導航欄 #}
{% extends 'xadmin/base_site.html' %}
#去掉标簽欄
{% block content-nav %}
{% endblock %}
{% block content %}
<div style = "height: 650px; width: 45%;margin-left: 20px;margin-top: 20px;margin-right: 20px;z-index: 0;color:brown;background: rgba(191,246,223,0.03)" align="left" >
<h1>最新消息</h1>
{% for i in operate_messages.object_list %}
<a href="content/{{ i.id }}" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >
<h5>
<div style="width: 95%;margin-left: 20px;margin-top: 20px;z-index: 0;color: black;" >
<div style="float:left">{{ forloop.counter }}、</div>
<div style="float:left">{{ i.company}}-</div>
<div style="float:left">{{ i.department}}-</div>
<div style="float:left">{{ i.add_post }}-</div>
<div style="float:left">到崗{{ i.arrive_time }}</div>
<div align="right">申請{{ i.save_time}}</div>
</div>
<hr style="height:1px ;background: rgba(83,177,141,0.4)">
</h5>
</a>
{% endfor %}
{% load i18n %}
<div class="pagination" style="margin: auto;float: right" align="right">
{% if operate_messages.has_previous %}
<a href="?{{ operate_messages.previous_page_number.querystring }}" target="_blank" rel="external nofollow" class="long">{% trans "上一頁" %}</a>
{% else %}
<span class="disabled long">{% trans "上一頁" %}</span>
{% endif %}
{% for page in operate_messages.pages %}
{% if page %}
{% ifequal page operate_messages.number %}
<span class="current page">{{ page }}</span>
{% else %}
<a href="?{{ page.querystring }}" target="_blank" rel="external nofollow" class="page">{{ page }}</a>
{% endifequal %}
{% else %}
...
{% endif %}
{% endfor %}
{% if operate_messages.has_next %}
<a href="?{{ operate_messages.next_page_number.querystring }}" target="_blank" rel="external nofollow" class="long">{% trans "下一頁" %}</a>
{% else %}
<span class="disabled long">{% trans "下一頁" %}</span>
{% endif %}
</div>
</div>
{% endblock content %}
(3)分頁重點pure_pagination
分頁代碼參考文章:https://blog.csdn.net/huoyuanshen/article/details/83310274
不同于常用分頁,菜單自定義頁面分頁容易卡主的地方是adminx中如何獲得request,此處是通過self獲得。(但是在這裡卡住了)