其实这个分页模块的原理就是根据设定的每页条数来分割queryset
。查询结果/每页子项数目=页数css
传入实现了__iter__
的object(通常来说就是queryset
)和指望的每页子项数给Pagination
来生成分页处理器的实例。python
根据这个分页生成器的page方法,传入页数就能够获得相应页数的内容。数据库
page = pagination.page(1)
django
生成器函数
num_pages
:分页后的总页数post
page_range
:分页后总页数的迭代url
分页对象code
has_next()/has_previous()
:判断先后是否还有orm
next_page_number()/previous_page_number()
:先后的页数数字csrf
常见异常处理
遇到超出页数范围时会抛出emptypage
在作文章的先后翻页时,也用了这个,将每页子项数设为1,就能够达到效果。
可是这个生成的分页的页数是以1为base的,因此先后页的跳转url参数不能直接用页数。
最开始生成的sitemap是本身经过查数据库而后生成的,后面发现Django有内置的模块。
把django.contrib.sitemaps
加到INSTALLED_APPS
中去。
已经启用了sites framework
。
其做用主要是提供一个钩子函数get_current_site
来获取当前的主域信息。
实现原理是先在DB创建一个存放site
信息的表,而后在settings
文件中指明site_id
,这样就能够在调用钩子函数时,根据这个id来获得对应的信息。
至于如何启用这个功能,先是将django.contrib.sites
加到INSTALLED_APPS
中,而后设置SITE_ID
,而后执行migrate
来生成表。
其实具体实现起来跟普通视图大同小异,只是Django内置了一个专门处理这个的视图函数,也就是django.contrib.sitemaps.views
中的sitemap
,这是一个函数型的视图函数。
至于须要渲染出来的信息也是用Django内置的Sitemaps
类包裹,其实就是在类中指明要查找的信息。
最后在配置URLCONF的时候,视图函数用内置的,参数Sitemaps用咱们本身重写的,若是有自定义模版也一块儿附上就能够了。
当sitemap信息超过50000条的时候,须要分页,则须要用到sitemap的索引函数,暂时尚未这个需求,因此先不作。
默认配置是启用了后台管理模块的,而后须要作的先是manage.py createsuperusr
建立管理者用户,而后再URLCONF中配置好路由url(r'^admin', admin.site.urls)
就能够了。
在用后台管理以前,我要修改数据时,要么经过python调用Django的orm去操做数据库,要么经过数据库的相关管理软件来对数据库进行操做,后台管理的便利之处就在于能够在这个管理后台的页面对数据进行修改。(其实就是我暂时只知道能这样作,更多功能在有相关需求的时候再去挖掘吧)
既然这个后台管理是方便咱们管理这些数据的,那么咱们须要关注的地方就在选择展现哪些数据。如何展现呢,其实就是建立admin.ModelAdmin
的子类,在这里面选择要展现的model(也就是那一个表),指出要展现的数据字段,展现规则,是否只读,排列顺序等各类配置。最后将这个子类和对应的model注册到admin.site.register
里,这样在后台管理就能看到对应的信息了。
Django内置了表单模块,用这个表单模块能够直接生成表单。
Django内置了几种类,首先是Form类,这个类的申明跟model差很少,对每一个字段进行定义,在view视图使用的时候就是将其实例化便可。
对原有的视图逻辑影响不大,只须要增长判断,在post请求的时候,将post内容传入给类生成实例,而后处理,跳转;在其余请求的时候,生成一个内容为空的实例,实际上就是在页面生成一个空的表单。
在模版文件中,只需传入这个实例就能够自动生成表单了,固然必定要记得加上{% csrf_token %}
这个,防止跨站伪造攻击。
而后就是Formset这个类,我的理解这个就是多个form加起来而已,也就是同时生成多个表单,我的在理解max_num
和extra
这个两个参数的时候有些犯浑,如今也记录一下,max_num
是这些表单的总数,extra
是生成的空白表单数,生成表单的时候,分为有初始值和无初始值,无初始值的那个表单个数就由extra
决定,若是有初始值的表单个数大于或等于max_num
,则extra
这个参数等于没有用了,最终只会生成有初始值表单的个数,这个数是能够大于max_num
的。
接着是ModelForm,这个类的好处在于根据已存在的model来生成form,相似继承,选择性继承字段,而且能够直接对已存在数据进行修改。不过也正是由于这样,验证数据的时候会有两步,先是验证表单数据,而后验证这个实例的数据与DB是否相符(表单数据类型是能够再定义的,因此不必定与model相等),注意的是,第一步完了以后会生成一个实例,若是在验证后须要更改数据的话,也须要改两次,一个是cleaned_data,一个是实例的。
最后是ModelFormset,这个暂时用不上,先放下。
在css和js方面,能够在class Media属性中设置自定义。