Heim  >  Artikel  >  Backend-Entwicklung  >  Django-Einführung in Paging-Beispiele

Django-Einführung in Paging-Beispiele

零下一度
零下一度Original
2017-06-27 09:54:161203Durchsuche

Die Paging-Funktion ist auf jeder Website erforderlich. Beim Paging dient sie eigentlich dazu, die Startposition der Daten zu berechnen, die auf der Seite in der Datenbanktabelle basierend auf den Eingaben des Benutzers angezeigt werden sollen.

Bestimmen Sie die Paging-Anforderungen:

1. 每页显示的数据条数
2. 每页显示页号链接数
3. 上一页和下一页
4. 首页和末页

Rendering:

Verwenden Sie zunächst das integrierte Paging von Django Funktion, schreiben Sie die Paging-Klasse:

 1 from django.core.paginator import Paginator, Page      # 导入django分页模块 2  3  4 class PageInfo(object): 5     def __init__(self, current_page, all_count, base_url, per_page=10, show_page=11): 6         """ 7  8         :param current_page: 当前页 9         :param all_count: 总页数10         :param base_url: 模板11         :param per_page: 每页显示数据条数12         :param show_page: 显示链接页个数13         """14         #若url错误,默认显示第一页(错误类型可能为:空页面编号,非整数型页面编号)15         try:16             self.current_page = int(current_page)17         except Exception as e:18             self.current_page = 119         20         #根据数据库信息条数得出总页数            21         a, b = divmod(all_count, per_page)22         if b:23             a += 124         self.all_page = a   
25         26         self.base_url = base_url27         self.per_page = per_page28         self.show_page = show_page29 30     #当前页起始数据id31     def start_data(self):       
32         return (self.current_page - 1) * self.per_page33 34     #当前页结束数据id35     def end_data(self):     
36         return self.current_page * self.per_page37     38     #动态生成前端html39     def pager(self):40         page_list = []41         half = int((self.show_page - 1)/2)42         #如果:总页数 < show_page,默认显示页数范围为: 1~总页数43         if self.all_page < self.show_page:44             start_page = 145             end_page = self.all_page + 146         #如果:总页数 > show_page47         else:48             #如果:current_page - half <= 0,默认显示页数范围为:1~show_page49             if self.current_page <= half:50                 start_page = 151                 end_page = self.show_page + 152             else:53                 #如果:current_page + half >总页数,默认显示页数范围为:总页数 - show_page ~ 总页数54                 if self.current_page + half > self.all_page:55                     end_page = self.all_page + 156                     start_page = end_page - self.show_page57                 else:58                     start_page = self.current_page - half59                     end_page = self.current_page + half + 160 61         #首页62         first_page = "<li><a href=&#39;%s?page=%s&#39;>首页</a></li>" %(self.base_url, 1)63         page_list.append(first_page)64 65         #上一页(若当前页等于第一页,则上一页无链接,否则链接为当前页减1)66         if self.current_page <= 1:67             prev_page = "<li><a href=&#39;#&#39;>上一页</a></li>"68         else:69             prev_page = "<li><a href=&#39;%s?page=%s&#39;>上一页</a></li>" %(self.base_url, self.current_page-1)70         page_list.append(prev_page)71 72         #动态生成中间页数链接73         for i in range(start_page, end_page):74             if i == self.current_page:75                 temp = "<li class=&#39;active&#39;><a href=&#39;%s?page=%s&#39;>%s</a></li>" %(self.base_url, i, i)76             else:77                 temp = "<li><a href=&#39;%s?page=%s&#39;>%s</a></li>" % (self.base_url, i, i)78             page_list.append(temp)79 80         #下一页(若当前页等于最后页,则下一页无链接,否则链接为当前页加1)81         if self.current_page >= self.all_page:82             next_page = "<li><a href=&#39;#&#39;>下一页</a></li>"83         else:84             next_page = "<li><a href=&#39;%s?page=%s&#39;>下一页</a></li>" %(self.base_url, self.current_page+1)85         page_list.append(next_page)86 87         #末页(若总页数只有一页,则无末页标签)88         if self.all_page > 1:89             last_page = "<li><a href=&#39;%s?page=%s&#39;>末页</a></li>" % (self.base_url, self.all_page)90             page_list.append(last_page)91 92         return ''.join(page_list)

Schreiben Sie dann die Methode in Ansichten (hier in app01 geschrieben):

1 from utils.pagnition import PageInfo    # 从文件中导入上步自定义的分页模块2 3 def custom(request):4     all_count = models.UserInfo.objects.all().count()   # 获取要显示数据库的总数据条数5     page_info = PageInfo(request.GET.get('page'), all_count, '/custom.html/',)      # 生成分页对象6     user_list = models.UserInfo.objects.all()[page_info.start_data():page_info.end_data()]      # 利用分页对象获取当前页显示数据7     return render(request, 'custom.html', {'user_list': user_list, 'page_info': page_info})     # 模板渲染

Dann schreiben Sie die Datei „custom.html“ in das Vorlagenverzeichnis:

 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4     <meta charset="UTF-8"> 5     <title>customers</title> 6 {#    引入bootstrap样式#} 7     <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css?1.1.11"> 8 </head> 9 <body>10 <h1>customers</h1>11 {#当前页显示的数据#}12 <ul>13     {% for row in user_list %}14         <li>{{ row.name }}</li>15     {% endfor %}16 </ul>17 18 {#分页#}19     <nav aria-label="Page navigation">20       <ul class="pagination">21 {#                传入page_info.pager#}22           {{ page_info.pager|safe }}23       </ul>24     </nav>25 26 </body>27 </html>

Zum Schluss fügen Sie die URL-Beziehung (urls.py) hinzu:

1 from django.conf.urls import url2 from django.contrib import admin3 from app01 import views as app01_views4 5 urlpatterns = [6     url(r'^custom.html/$', app01_views.custom),7 ]

An diesem Punkt haben Sie die Anpassung des Paging-Moduls mithilfe der Paging-Funktion von Django abgeschlossen, die auf verschiedene Unternehmensseiten angewendet werden kann.

Referenzmaterialien:

1. Der Weg zu Python [Teil 17]: Django [Kapitel für Fortgeschrittene]

Das obige ist der detaillierte Inhalt vonDjango-Einführung in Paging-Beispiele. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn