• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    牌九網站

    牌九網站是大型的國際娛樂游戲的NO.1,足球籃球投注等多款游戲,官方穩定返現高,最高返現888,玩家可以在網頁上登錄注冊,官網還提供app下載。django 分頁器(paginator)_www.xcic.net

    若何利用django自帶的分頁器(Paginator),本篇文章本家兒要環繞分頁器,具體論述實現分頁器功能。

    這里我利用的是py3和django2.0版本!

    東西/原料

    • python3
    • django2.0.3

    Models模子點竄

    1. 1

      from django.db import models

      class Blog(models.Model):

          title = models.CharField(max_length=50) # 題目 限制50字

          content = models.TextField() # 文章內容

          def __str__(self):

              return self.title

          class Meta: # 自界說排序

              ordering = ['-id']

    2. 2

      這里我在blog這個app下的models.py里面界說了一個BlogCharField 字符串字段,用于較短的字符串,利用它時必需增添限制 max_lengthTextField 字符串字段,可以保留年夜量文本。

    3. 3

      模子點竄完跋文得先利用python manage.py makemigrations,然后再用

      python manage.py migrate

    Views視圖點竄

    1. 1

      def home(request):

          context = {}

          context['blogs'] = Blog.objects.all() # 獲取全數文章

          return render(request, "home.html", context)

    url路由點竄

    1. 1

      from django.contrib import admin

      from django.urls import path

      from blog import views

      #127.0.0.1:8000

      urlpatterns = [

          path('admin/', admin.site.urls),

          path('',views.home, name='home'),

      ]

    2. 2

      django網頁的默認打開網址是127.0.0.1:8000,當我們打開網址時,響應的就會由第二條path去執行,然后由views視圖去響應這個請求

    利用shell快速生當作年夜量數據

    1. 1

      若是我們手動在后臺建立一個個文章,顯然是很慢的,是以我們可以利用shell來為我們快速生當作文章數據。起首在cmd號令模式下輸入python manage.py shell,接著輸入以下代碼就能建立出31篇文章了!

    2. 2

      from blog.models import Blog

      for x in range(1,32):

          blog = Blog()

          blog.title = "第%s篇文章" %(x)

          blog.content = "第%s篇內容" %(x)

          blog.save()

      Blog.objects.all() # 看看是否生當作了文章

    添加模板

    1. 1

      APP目次下建立templates文件夾,并在該文件夾里建立一個home.html文件,接著添加內容

    2. 2

      <!DOCTYPE html>

      <html>

      <head>

          <meta charset="UTF-8">

          <title>Hello</title>

      </head>

      <body>

          {% for blog in blogs %}

              <p>{{ blog.title }}</p>

              <p>{{ blog.content }}</p>

              <hr>

          {% endfor%}

      </body>

      </html>

    3. 3

      接著python manage.py runserver之后打開網址127.0.0.1:8000,你會看到頁面呈現31篇文章,若是文章篇數過多,會導致網頁加載遲緩甚至卡死,并且十分不美不雅,是以我們就想到利用分頁器來解決這個問題。    

    利用django自帶的paginator分頁器

    1. 1

      views.py添加代碼

    2. 2

      from django.shortcuts import render

      from blog.models import Blog

      from django.core.paginator import Paginator

      def home(request):

          context = {}

          blogs = Blog.objects.all()

          paginator = Paginator(blogs, 5) # 每5份內容分頁一次

          page_num = request.GET.get('page',1) # 獲取url參數,127.0.0.1:8000/?page=<value>

          # 不法數值則返回1 數值為空也返回1 如 127.0.0.1:8000/?page=asdsa

          page_blogs = paginator.get_page(page_num) #獲取當前(頁碼)所需要的文章列表 半斤八兩于一個容器

          context['blogs'] = page_blogs

          return render(request, "home.html", context)

    3. 3

      這里我們利用了django的Paginator,

      用法:Paginator(數據列表,每頁中含幾多數據)

      之后,我們再次打開網頁127.0.0.1:8000,會發現頁面只顯示了10篇文章!我們在網址上輸入http://127.0.0.1:8000/?page=2,當作功了!

    再次點竄views視圖

    1. 1

      這里為了結果加倍較著,我點竄了paginator = Paginator(blogs, 2),每一頁中只含兩篇文章!

    2. 2

      from django.shortcuts import render

      from blog.models import Blog

      from django.core.paginator import Paginator

      def home(request):

          context = {}

          blogs = Blog.objects.all()

          paginator = Paginator(blogs, 2) # 每2份內容分頁一次

          page_num = request.GET.get('page',1) # 獲取url參數,127.0.0.1:8000/?page=<value>

          # 不法數值則返回1 數值為空也返回1 如 127.0.0.1:8000/?page=asdsa

          page_blogs = paginator.get_page(page_num) #獲取當前(頁碼)所需要的文章列表 半斤八兩于一個容器

          page_list = [x for x in range(page_blogs.number -2, page_blogs.number + 3 )if x in paginator.page_range]

          print(page_list)

          # 添加省略號

          if page_list[0] -1 >= 2: # 判定當前第一個元素減1是否年夜于2 

              page_list.insert(0, "...") # 則插入該數構成為第一個元素 ...

          if paginator.num_pages - page_list[-1] >= 2: # 判定最年夜頁碼數-最后一個元素相減是否年夜于2

              page_list.append("...") # 則添加一個元素

          print(page_list)

          #添加首從頭至尾頁

          if page_list[0] == "...":

              page_list.insert(0, 1) # 則插入該數構成為第一個元素(首頁)

          if page_list[-1] != paginator.num_pages: # 判定是否不等于最年夜頁碼

              page_list.append(paginator.num_pages) # 不等于則插入到最后一個元素(從頭至尾頁)

          print(page_list)

          context['blogs'] = page_blogs

          context['page_list'] = page_list

          return render(request, "home.html", context)

      # paginator.num_pages 總共有幾多頁碼

      # paginator.page_range 頁碼規模 如 (1,7)

      # page_list 頁碼列表規模

    3. 3

      這里的

      page_list = [x for x in range(page_of_blogs.number -2, page_of_blogs.number + 3 )if x in paginator.page_range]

      我利用了列表生當作式,如許可以避免超出頁碼規模或呈現頁碼數為負數的環境,別的我把page_list頁碼列表規模傳出去,如許就可以在模板中利用了!別的添加了首從頭至尾頁以及省略號!之后就是在模板中利用了!

    點竄模板home.html

    1. 1

      這里我利用的是bootstrap的分頁組件!在head頭部記得引入css!

      <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">

    2. 2

      <!DOCTYPE html>

      <html>

      <head>

          <meta charset="UTF-8">

          <title>Hello</title>

          <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">

      </head>

      <body>

          <div>

              {% for blog in blogs %}

                  <p>{{ blog.title }}</p>

                  <p>{{ blog.content }}</p>

                  <hr>

              {% endfor%}

          </div>

          <div>

              <ul>

                  <li>

                      {% if blog_list.has_previous %}{# 是否上一頁 #}

                          <a href="?page={{ blog_list }}" aria-label="Previous">

                              <span aria-hidden="true">&laquo;</span>

                          </a>

                      {% else %}

                          <span aria-hidden="true">&laquo;</span>

                      {% endif%}

                  </li>

                  {# 全數頁碼 #}

                  {% for page_list in page_list %}

                      {% if page_list == blogs.number %}{# 判定是否當前頁 是則高亮 #}

                          <li><span>{{ page_list }}</span></li>

                      {% else %}

                          {% if page_list == '...' %}

                              <li><span>{{ page_list }}</span></li>

                          {% else %}

                              <li><a href="?page={{ page_list }}">{{ page_list }}</a></li>

                          {% endif %}

                      {% endif %}

                  {% endfor %}

                  <li>

                      {% if page_list.has_next %}

                          <a href="#" aria-label="Next">

                              <span aria-hidden="true">&raquo;</span>

                          </a>

                      {% else %}

                          <span aria-hidden="true">&raquo;</span>

                      {% endif %}

                  </li>

              </ul>

      </div>

      </body>

      </html>

    3. 3

      context['blogs'] = page_blogs

      context['page_list'] = page_list

      page_list.has_previous 是否有上一頁

      page_list.has_next 是否有下一頁

      blogs.number 當前頁碼數 半斤八兩于-> page_blogs.number 

    4. 4

      這里我利用了django的模板,for輪回,前提if,一般都用{% 前提 %},變量則利用{{ 變量名 }},

    5. 5

      若是想要讓分頁器在網頁上居中,可以在div標簽上添加:

      <div align="center"></div>即可實現居中結果

      最終結果:

    注重事項

    • 注重要在setting.py里在INSTALLED_APPS添加你的APP進去!
    • 若是是第一次建立項目,先利用python manage.py migrate進行遷徙
    • 發表于 2018-08-21 00:00
    • 閱讀 ( 532 )
    • 分類:其他類型

    0 條評論

    請先 登錄 后評論
    admin
    admin

    0 篇文章

    作家榜 ?

    1. xiaonan123 189 文章
    2. 湯依妹兒 97 文章
    3. luogf229 46 文章
    4. jy02406749 45 文章
    5. 小凡 34 文章
    6. Daisy萌 32 文章
    7. 我的QQ3117863681 24 文章
    8. 華志健 23 文章

    推薦文章

    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆