パケットサプリメントとページングシステム

インポートのOS
 インポートSYS


もし __name__ == ' __main__ ' 
    os.environ.setdefault(" DJANGO_SETTINGS_MODULE "" ormday71.settings " 輸入ジャンゴ
    django.setup()

    app01 輸入モデル

    RET = models.Employee.objects.all()の値(" ID "" DEPT " プリント(RET)

    django.db.models インポートの平均を
    RET = models.Employee.objects.values(" DEPT ").annotate(平均=平均(" 給料"))の値(" DEPT "" 平均" 、印刷(RET)                    以什么分组#得到的值

    RET = models.Employee2.objects.values(" DEPT_ID ").annotate(平均=平均(" 給料"))の値(" dept__name "" 平均"印刷(右)

    查所有的员工和部门名称 
    RET = models.Employee2.objects.values(" 名前"" dept__name " プリント(RET) #
     
     RET = models.Employee2.objects.select_related()の値( "名前"、 "dept__name")#1 プリント(RET) #
 RET = models.Author.objects.select_related( "books__title")の値( "名前"、 "books__title")#1 プリント(RET) 印刷( "=" * 120)RET = models.Author.objects.prefetch_related( "books__title")の値( "名前"、 "books__title") 品質(右)
    
        
    
    
    
    


    一括作成
    100本があるオブジェクト 
    [models.Book(タイトル= OBJS = " リバー} { " .format(I))をするための I におけるレンジ(1500 )]

    データベースで作成したバッチ、10回提出 
    models.Book.objects.bulk_create(OBJS、10 

    models.Book.objects.all()。削除()
django.shortcuts インポートレンダリング

ここにあなたの意見を作成します。
app01 輸入モデル


デフ冊(リクエスト):
    从URL取参数 
    PAGE_NUM = request.GET.get(" ページ" プリント(PAGE_NUM、タイプ(PAGE_NUM))

    データの総数である 
    TOTAL_COUNT = models.Book.objects.all()。COUNT()
 呼び出しクラス
    から utils.mypage インポートページ
    page_obj =ページ(PAGE_NUM、TOTAL_COUNT、PER_PAGE = 10、URL_PREFIX = " /書籍/ "、max_page = 9 、)

    RET = models.Book.objects.all()[page_obj.start:page_obj.end]

    page_html = page_obj.page_html()


    リターンレンダリング(リクエスト、" books.html "、{ " 書籍":RET、" page_html " :page_html})



DEF (リクエスト)DEPTS:
    URLパラメータテイクから 
    PAGE_NUM = request.GET.get(" ページ" を印刷(タイプ(PAGE_NUM)のPAGE_NUM、)
    データの総数は 
    TOTAL_COUNT = models.Dept.objects.all()COUNT。 ()
     から utils.mypage インポートします
    page_obj =ページ(PAGE_NUM、TOTAL_COUNT、PER_PAGE = 10、URL_PREFIX = " / DEPTS / "、max_page = 11 、)

    RET = models.Dept.objects.all()[page_obj.start:page_obj.end】
     プリント(RET)

    page_html = page_obj.page_html()
     リターン(リクエスト、レンダリング" dept.html "、{ " DEPTS ":RET、" page_html ":page_htmlを})
クラスページ():

    デフ __init__(自己、PAGE_NUM、TOTAL_COUNT、URL_PREFIX、PER_PAGE = 10、max_page = 11 ):
         ""」

        :PAGE_NUM PARAM:現在のページ番号
        :のParam TOTAL_COUNT:データの総数
        :のParam URL_PREFIX:HREFタグの接頭辞
        :ParamのPER_PAGE:どのように多くの作品ページあたりのデータ
        :のParam max_pageは:いくつかのフォリオのページまで表示します
        ""」
        self.url_prefix = URL_PREFIX
        self.max_page = MAX_PAGE
         各ページショーどのように多くのデータ
        総表示するために必要なページ数 
        total_pageを、M = divmod(TOTAL_COUNT、PER_PAGE)
         IF メートル:
            total_page + = 1 
        self.total_page = total_page

        してみてください
            PAGE_NUM = INT(PAGE_NUM)
            あなたはページ数が最大ページ数、デフォルトの戻りの最後のページを超えて入力した場合
            IF PAGE_NUM> total_page:
                PAGE_NUM = total_page
         除く例外としてE:
            ページの最初のページのデフォルトの戻りデータ入力数は深刻ではありません 
            。PAGE_NUM 1 = 
        self.page_num = PAGE_NUM

        ここからに運ば二つの変数格納されたデータ定義 
        ( - 1 PAGE_NUM)* 10 self.data_start = 
        self.data_end = 10 * PAGE_NUMを

        ページショーどのように多くの総ページ
        IF total_page < self.max_page:
            self.max_page = total_page

        half_max_page = self.max_page // 2
         #はどこ開始するページ番号で表示 
        PAGE_START = PAGE_NUM - half_max_page
         #1 ページショーのページどこの端 
        PAGE_END = PAGE_NUM + half_max_page
         現在のページが1より半分だけ小さい場合は
        IF PAGE_START <= 1 
            PAGE_START = 1 
            PAGE_END = self.max_page
         総ページ数の現在のページの半分を加えたよりも大きい場合
        IF PAGE_END> = total_page:
            PAGE_END = total_page
            PAGE_START = total_page - self.max_page + 1 
        self.page_start = PAGE_START
        self.page_end = PAGE_END

    @property
    デフ(自己)開始:
         リターンself.data_start

    @property
    デフエンド(自己):
         戻りself.data_end


    DEFのpage_html(セルフ):
        独自のスプライシングタブのHTMLコード 
        html_str_list = []
        プラス最初のページ 
        html_str_list.append(" <LI> <a href="{}?page=1">ホーム</a>の< /李> " .format(self.url_prefix))

        自分自身のための裁判官、それが最初のページであれば、何の前には存在しない
        のIF self.page_num <= 1 
            html_str_list.append(' <LIクラス= "無効"> <a href="#"> <スパンARIA-隠さ= "真の">&LAQUO; </ span>にする</a>ます。</ li> ' .format(自己.page_num-1 ))
         加一个上一页的标签 
            html_str_list.append(" <LI> <a href="{}?page={}"> <スパンARIA-隠さ= "真の">&LAQUO。 </スパン> </a>の</ LI> " .format(self.url_prefix、self.page_num-1 ))

        以下のためのレンジ(self.page_start、self.page_end + 1 ):
            ページを追加する場合は、現在アクティブなスタイルのクラスである
            IF I == self.page_num:
                TMP = ' <LIクラス= "アクティブ"> <a href="{0}?page={1}"> {1} </a>の</ LI> ' .format(self.url_prefix、I)   固定标识、当前页
            
                TMP = ' <LI> <a href="{0}?page={1}"> {1} </a>の</ LI> ' .format(self.url_prefix、I)

            html_str_list.append(TMP)

        次のボタンの追加
        #のそれは最後のページであれば何も次がない、裁判官を
        IF self.page_num> = self.total_page:
            html_str_list.append(' <LIクラス= "無効"> <a href="#"> <スパンARIA-隠さ= "真">表示&raquo; </ span>にする</a>ます。</ li> ' それ以外
            html_str_list.append(' <LI> <a href="{}?page={}"> <スパンARIA-隠さ= "真">表示&raquo; </ span>にする</a>ます。</ li> ' .format( self.url_prefix、self.page_num + 1 ))
        加最后一页 
        html_str_list.append(' <LI> <a href="{}?page={}">尾页</a>の</ LI> ' 。フォーマット(self.url_prefix、self.total_page))

        page_html = "" .join(html_str_list)
         リターン page_html

おすすめ

転載: www.cnblogs.com/qwer-123/p/12072707.html