首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Django中实现pageviews

在Django中实现pageviews
EN

Stack Overflow用户
提问于 2020-04-30 23:26:12
回答 1查看 91关注 0票数 0

我正在一个小网站上工作,我想在细节视图中显示每个对象的总视图。但坦率地说,我不知道如何实现这一点。让我发布我的models.py和views.py

Models.py

代码语言:javascript
复制
class Music(models.Model):
    artist = models.CharField(max_length=300)
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(default='', blank=True, unique=True)
    thumbnail = models.ImageField(blank=False)
    audio_file = models.FileField(default='')
    uploaded_date = models.DateTimeField(default=timezone.now)

    class Meta:
        ordering = ['-uploaded_date']

    def save(self):
        self.uploaded_date = timezone.now()
        self.slug = slugify(self.title)
        super(Music, self).save()

    def __str__(self):
        return self.title + ' by ' + self.artist

    def get_absolute_url(self):
        return reverse('music:detail', kwargs={'slug': self.slug})

Views.py

代码语言:javascript
复制
        return Music.objects.order_by('-uploaded_date')


def detail(request, slug):
    latest_posts = Music.objects.order_by('-uploaded_date')[:5]
    song = get_object_or_404(Music, slug=slug)
    comments = Comment.objects.filter(post=song)

    if request.method == 'POST':
        comment_form = CommentForm(request.POST or None)
        if comment_form.is_valid():
            comment = comment_form.save(commit=False)
            comment.post = song
            comment.save()
            return HttpResponseRedirect(song.get_absolute_url())
    else:
        comment_form = CommentForm()

    context = {
        'latest_posts': latest_posts,
        'song': song,
        'comments': comments,
        'comment_form': comment_form,
    }
    return render(request, 'music/detail.html', context)
EN

回答 1

Stack Overflow用户

发布于 2020-05-01 03:12:06

您可以将IntegerField添加到名为page_viewsMusic模型中

代码语言:javascript
复制
class Music(models.Model):
    ...
    page_views = IntegerField(default=0)

然后借用this answer,每当请求页面时,都可以从detail视图中为单个song递增views

代码语言:javascript
复制
def detail(request, slug):
    latest_posts = Music.objects.order_by('-uploaded_date')[:5]
    song = get_object_or_404(Music, slug=slug)
    comments = Comment.objects.filter(post=song)

    if request.method == 'POST':
        comment_form = CommentForm(request.POST or None)
        if comment_form.is_valid():
            comment = comment_form.save(commit=False)
            comment.post = song
            comment.save()
            return HttpResponseRedirect(song.get_absolute_url())
    else:
        comment_form = CommentForm()
        song.update(page_views=F('page_views') + 1) # Add this line here so it's not updated on POST

    context = {
        'latest_posts': latest_posts,
        'song': song,
        'comments': comments,
        'comment_form': comment_form,
    }
    return render(request, 'music/detail.html', context)

请注意,您可能不希望将通过表单添加评论的人计算为页面的另一个视图,因此,如何定义计数实际增加的时间由您决定。这只是计算页面被请求次数的一种非常基本的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61527033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档