RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1233137
Accepted
Alex Fox
Alex Fox
Asked:2022-01-19 02:07:51 +0000 UTC2022-01-19 02:07:51 +0000 UTC 2022-01-19 02:07:51 +0000 UTC

姜戈 | 如何在不尖叫的情况下实现视图计数器!

  • 772

如何在通过浏览器重新加载排除 CREATION 的可能性(简单的选项 ala counter +=1 不起作用)的同时实现视图计数器。

class Post(models.Model):
    ...
    total_views = models.IntegerField(default=0)

    def counter(self):
        return self.total_views += 1
python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Alex Fox
    2022-01-20T00:14:28Z2022-01-20T00:14:28Z

    我还是想通了,我希望遇到这种问题的人得到解决方案。

    В файле models.py:

    from django.db import models
    
    class Ip(models.Model): # наша таблица где будут айпи адреса
        ip = models.CharField(max_length=100)
    
    def __str__(self):
        return self.ip
    
    class Post(models.Model): # модель у которой будем считать просмотры
        ...
        views = models.ManyToManyField(Ip, related_name="post_views", blank=True)
    

    在admin.py中注册模型:

    from django.contrib import admin
    from .models import Post, Ip
    
    admin.site.register(Post)
    admin.site.register(Ip)
    

    在views.py文件中,我们创建了一个获取用户 IP 和视图的方法:

    from django.shortcuts import render
    from videos.models import Post, Ip
    
    # Метод для получения айпи
    def get_client_ip(request):
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR') # В REMOTE_ADDR значение айпи пользователя
        return ip
    
    # Главная страница тут рендерим все посты
    def home_view(request):
        posts = Post.objects.all()
    
        context = {
            'posts' : posts,
        }
        return render(request, 'main/home.html', context)
    
    # Страница самого поста
    def post_view(request, slug):
        post = Post.objects.get(slug=slug)
    
        ip = get_client_ip(request)
    
        if Ip.objects.filter(ip=ip).exists():
            post.views.add(Ip.objects.get(ip=ip))
        else:
            Ip.objects.create(ip=ip)
            post.views.add(Ip.objects.get(ip=ip))  
        
        context = {
            'post' : post,
        }
        return render(request, 'main/post.html', context)
    

    我的urls.py文件:

    from django.contrib import admin
    from django.urls import path
    from django.conf import settings
    from django.conf.urls.static import static
    from .views import  (
        home_view, 
        post_view, 
    )
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', home_view, name='home-view'),
        path('posts/<str:slug>/', post_view, name='post'),
    ]
    

    为了在Post模型中获取models.py文件中的视图数量,我们创建了一个方法,将视图数量返回给我们:

    def total_views(self):
        return self.views.count()
    

    main/home.html模板:

    {% extends 'base.html' %}
    
    {% block content %}
    
    <div class="content">
        <div class="grid-container">
        {% for post in posts %}
                <div class="item">
                    <a href="/posts/{{post.slug}}/">
                        <p>{{post.title}}<p>
                        <p>Просмотры : {{post.total_views}}</p> <!-- Просмотры -->
                    </a>
                </div>
        {% endfor %}
        </div>
    </div>
    
    
    {% endblock content %}
    

    main/post.html模板:

    {% extends 'base.html' %}
    
    {% block content %}
    
    <div class="post">
        <h3>{{post.title}}</h3>
        <hr>
        <p>Просмотры : {{post.total_views}}</p> <!-- Просмотры -->
        <hr>
        <p>Описание: {{post.desc}}</p>
    </div>
    
    
    {% endblock content %}
    

    没错,我希望如果有人有这样的问题,他会偶然发现我的解决方案,这会对他有所帮助。感谢您的关注!

    • 6

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5