zoukankan      html  css  js  c++  java
  • Django 浏览页面点击计数(通用视图)

    通常情况下在Views.py中直接写一个视图函数就可以了,由于每次点出详情时都会经视图函数处理,

    所以可以在此视图函数中对浏览次数进行“+1” 操作。

    对应的url:url(r'^(?P<pk>[0-9]+)/$', views.get_detail, name='detail'),

    def get_detail(request, pk=''):
    # 根据文章的id 对每一次点击累加
        context = Text.objects.get(id=pk)
        browses = context.browse
        browses += 1
        context.browse = browses
        context.save()
        return render(request, 'news/detail.html',{'context':context})

    但这次跟着Django 官方文档走的,用的:generic.DetailView子类:

    然后知道它有这些方法:

    1.dispatch()
    2.http_method_not_allowed()
    3.get_template_names()
    4.get_slug_field()

    5.get_queryset()
    6.get_object()
    7.get_context_object_name()
    8.get_context_data()
    9.get()
    10.render_to_response()

    英语不好,看了好一会也没发现怎么像上面的get_detail函数那样获取对应“id”的对象

    最后试了下get,写了下面这个:

    对应的url:url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),

    class DetailView(generic.DetailView):
        model = Text
        template_name = 'news/detail.html'
        context_object_name = 'blog'
    
        def get_queryset(self):
    
            return Text.objects.filter(pub_date__lte=timezone.now())
    
        def get(self, request, *args, **kwargs):
            # 根据文章的id 对每一次点击累加
            blog = Text.objects.get(id=kwargs['pk'])
            browses = blog.browse
            browses += 1
            blog.browse = browses
            blog.save()
            return render(request, 'news/detail.html', {'blog': blog})

    事实上关键就在得到具体的对象,所以这个地方需要"id",所以需要得到从url中捕获的“pk”,

    但是这个值在**kwargs中,可以通过kwargs['pk']得到它。

  • 相关阅读:
    [牛客]十二桥问题 解题报告
    [NOIP2017 逛公园] 解题报告
    [JSOI2008]最小生成树计数 解题报告
    类欧几里得算法
    概率与期望题目列表
    [SCOI2008]配对 解题报告
    拦截导弹
    牛客网-约数的个数
    牛客网-成绩排名
    最大连续区间和的算法总结
  • 原文地址:https://www.cnblogs.com/Andy963/p/6090161.html
Copyright © 2011-2022 走看看