天天看點

Xadmin左側菜單——背景菜單頁面自定義1.菜單的自定義頁面實作2.models代碼3.adminx代碼4.template代碼5.實作效果6.注意事項7.背景頁面中分頁實作

目錄

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.實作效果

Xadmin左側菜單——背景菜單頁面自定義1.菜單的自定義頁面實作2.models代碼3.adminx代碼4.template代碼5.實作效果6.注意事項7.背景頁面中分頁實作

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獲得。(但是在這裡卡住了)