django[十二] 常用功能块
功能
分页 django-pure-pagination
类中定义
from pure_pagination.mixins import PaginationMixi from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import ListView, DetailView, CreateView,TemplateView class UserListView(LoginRequiredMixin, PaginationMixin, ListView):
html中写法
<div class="row"> <div class="col-sm-6"> <div class="dataTables_info" id="editable_info" role="status" aria-live="polite"> 显示 [{{ paginator.count }}] 条数据中的 第 [{{ page_obj.start_index}}] 至 [{{ page_obj.end_index }}] 的数据 </div> </div> {% include 'paginator.html' %} </div><!-- /.paginator -->
类视图内置函数
class UserListView(LoginRequiredMixin, PaginationMixin, ListView): model = UserProfile // 模型名 template_name = "dashboard/user_list.html" //模板名 context_object_name = "userlist" // 返回的context名字 paginate_by = 10 //分页数量 keyword = '' def def get_queryset(self): // 该方法可以返回一个量身定制的对象列表,当我们使用Django自带的ListView展示所有对象列表时,ListView默认会返回Model.objects.all() queryset = super(UserListView, self).get_queryset() self.keyword = self.request.GET.get('keyword', '').strip() if self.keyword: queryset = queryset.filter(Q(username__icontains=self.keyword) |Q(name_cn__icontains=self.keyword)) return queryset def get_context_data(self, **kwargs): // 可以用于给模板传递模型以外的内容或参数,非常有用,比如这边是keyword context = super(UserListView, self).get_context_data(**kwargs) context['keyword'] = self.keyword return context
页面跳转jump
if form.is_valid(): form.save() res = {"code": 0, "result": "更新成功", 'next_url': self.next_url} else: res = {"code": 1, "errmsg": form.errors, 'next_url': self.next_url} logger.error("delete power error: %s" % traceback.format_exc()) return render(request, settings.JUMP_PAGE, res)
jump.html
{% extends "base.html" %} {% block content %} {% if code == 0 %} <h1>{{ result }}</h1> {% else %} <h1>操作失败:</h1><br> <h3>{{ errmsg }}</h3> {% endif %} {% endblock %} {% block js %} var status = {{ code }}; var next_url = "{{ next_url|safe }}"; var timejump = 1500; $(function(){ if (status != 0){ timejump = 5000 } setTimeout(function(){ window.location.href = next_url; }, timejump) }) {% endblock %}
html的超链接写法
<a href="{% url 'users:user-granted-asset' pk=user_object.id %}" class="text-center"><i class="fa fa-cubes"></i> {% trans 'Asset granted' %}</a> users:user-granted-asset ==> users是app_name user-granted-asset是url里面name
urls.py
path('user/<uuid:pk>/assets/', views.UserGrantedAssetView.as_view(), name='user-granted-asset')
update_or_create
try: obj,created = ServerList.objects.update_or_create(server_name=webdata.get("server_name"), defaults={ 'server_name':webdata.get("server_name"), 'server_property':webdata.get("server_property"), 'active':webdata.get("active"), 'create_by':request.user.username, 'comment':webdata.get("comment"), }) if created: res = {"status": True,'msg':'服务创建成功'} else: res = {"status": True,'msg':'服务更新成功'} except Exception as e: res = {"status": False,'msg':'服务修改失败,reason:[%s]' % str(e)} 需要有一个唯一键,这个键不能改,defaults值是更新值 如果id值是-1 那么创建出来的也是-1的id