django的基于类的视图
django-extra-views的Python项目详细描述
django extra views-django缺少的基于类的泛型视图
django的基于类的泛型视图非常好,它们允许您在相对较少的代码行中完成大量web应用程序设计模式。不过,它们确实有它们的局限性,而这正是这个视图库要克服的。
安装
从pypi安装(使用pip)。
pip install django-extra-views
从github安装。
pip install -e git://github.com/AndrewIngram/django-extra-views.git#egg=django-extra-views
迄今为止的功能
- formset和modelformset视图-相当于formview和modelformview的formset。
- inlineformsetview-用于编辑与模型相关的表单集(使用inlineformset工厂)
- createWithInlinesView和updateWithInlinesView-用于编辑模型及其关系
- genericinlineformsetview,等同于inlineformsetview,但用于genericforeignkeys
- 支持CreateWithInlinesView和UpdateWithInlinesView中的通用内联线
- 支持用NamedFormsetsMixin 命名每个内联或窗体集 <> LI> SoTabLelistMIXIN:在您的观点中分类功能的通用混合蛋白
- SaleCabelististMIXIN:在您的视图 中搜索功能的通用混合函数
仍有待解决
我想在modelformsetview及其派生程序中添加对分页的支持,目标是能够模拟django的管理中的change_list视图。目前,这是困难的,因为Django的多对象Objixin如何处理分页。
示例
定义窗体集视图。
fromextra_viewsimportFormSetViewclassAddressFormSet(FormSetView):form_class=AddressFormtemplate_name='address_formset.html'
定义ModelFormSetView。
fromextra_viewsimportModelFormSetViewclassItemFormSetView(ModelFormSetView):model=Itemtemplate_name='item_formset.html'fields='__all__'
定义CreateWithInlinesView和UpdateWithInlinesView。
fromextra_viewsimportCreateWithInlinesView,UpdateWithInlinesView,InlineFormSetFactoryfromextra_views.genericimportGenericInlineFormSetFactoryclassItemInline(InlineFormSetFactory):model=Itemfields='__all__'classTagInline(GenericInlineFormSetFactory):model=Tagfields='__all__'classCreateOrderView(CreateWithInlinesView):model=Orderinlines=[ItemInline,TagInline]fields='__all__'classUpdateOrderView(UpdateWithInlinesView):model=Orderinlines=[ItemInline,TagInline]fields='__all__'# Example URLs.urlpatterns=[url(r'^orders/new/$',CreateOrderView.as_view()),url(r'^orders/(?P<pk>\d+)/$',UpdateOrderView.as_view()),]
其他功能
如果您希望对窗体集的名称进行更多的控制(而不是迭代内联),则可以使用NAMEDFFESTSESMIXIN。
fromextra_viewsimportNamedFormsetsMixinclassCreateOrderView(NamedFormsetsMixin,CreateWithInlinesView):model=Orderinlines=[ItemInline,TagInline]inlines_names=['Items','Tags']fields='__all__'
可以通过添加SexChabLeMIXE和设置SexCHyField:
向ListVIEW添加搜索功能fromdjango.views.genericimportListViewfromextra_viewsimportSearchableListMixinclassSearchableItemListView(SearchableListMixin,ListView):template_name='extra_views/item_list.html'search_fields=['name','sku']model=Item
在这种情况下,如果提供了'q'查询字符串(如/searchable/?Q=查询),或者您 可以手动重写get_search_query方法,以定义自己的搜索功能。
也可以将search_fields中的某些项定义为元组(例如[('name', 'iexact', ), 'sku']) 为搜索提供自定义查找。默认查找为icontains。我们强烈建议只使用 字符串查找,在比较之前,数字字段将转换为字符串以防止转换错误。 这是由SturChabeliMin的^ {TT6}$设置控制的。
在视图中定义排序。
fromdjango.views.genericimportListViewfromextra_viewsimportSortableListMixinclassSortableItemListView(SortableListMixin,ListView):sort_fields_aliases=[('name','by_name'),('id','by_id'),]model=Item
通过定义“排序字段别名”属性,可以隐藏查询字符串中的实数字段名(请参见示例) 或者通过定义排序字段按原样显示它们。SoTabLelistMIN添加了{TT7}$$ SoTelPEL类变量, 然后在模板中可以使用帮助函数:{{ sort_helper.get_sort_query_by_FOO }}, {{ sort_helper.get_sort_query_by_FOO_asc }},{{ sort_helper.get_sort_query_by_FOO_desc }}和 {{ sort_helper.is_sorted_by_FOO }}
更多描述性的例子。