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
                                    

  

posted @ 2019-12-26 14:51  richardzgt  阅读(133)  评论(0编辑  收藏  举报