【问题标题】:How do I count visits of page in Django? (through redirecting)如何计算 Django 中页面的访问量? (通过重定向)
【发布时间】:2019-01-28 17:10:09
【问题描述】:

我已经阅读了其他几个问题,但我要找的内容并不存在。

我想计算用户浏览了 ToPost/to_post.html 部分的次数。

延迟重定向有效,但增加访问次数无效post.visit_num += 1

我有一个 视图,其模板在一秒钟后重定向:

def ToPost(request, pk):
    post = Post.objects.get(pk=pk)
    post.visit_num += 1
    args = {'post': post}
    return render(request, 'posts/to_post.html', args)

pk 在 URL 中:

url(r'^(?P<pk>\d+)/to-post/$', views.ToPost, name='to_post'),

模板to_post.html

{% extends 'base.html' %}

{% block head %}
<meta http-equiv="refresh" content="1;url={% url 'home_space:view_post' pk=post.pk %}">
{% endblock %}

{% block body %}
<div class="container">
    <h2>
        To post {{ post.pk }}...
    </h2>
</div>
{% endblock %}

Post的模型:

class Post(models.Model):
    title = models.CharField(max_length=128, verbose_name='Title')
    body = models.CharField(max_length=500, verbose_name='Description')
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    visit_num = models.PositiveIntegerField(default=0)

    def __str__(self):
        return self.title

【问题讨论】:

  • 您在增加访问次数后没有保存帖子。

标签: python django redirect view count


【解决方案1】:

您必须在递增后保存 post 实例,并使用 F 对象来避免竞争条件。也不要将函数名大写,改用snake_case,更多关于F对象在这里https://docs.djangoproject.com/en/2.1/ref/models/expressions/#f-expressions

from django.db.models import F    

def to_post(request, pk):
    post = Post.objects.get(pk=pk)
    post.visit_num = F('visit_num') + 1
    post.save()
    args = {'post': post}
    return render(request, 'posts/to_post.html', args)

【讨论】:

    【解决方案2】:

    您需要保存对帖子的更改:

    post.save()
    

    【讨论】:

      猜你喜欢
      • 2016-10-23
      • 1970-01-01
      • 2017-04-19
      • 2019-08-23
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多