Django count просмотров с помощью, django-hitcount
Я сломал себе голову, чтобы реализовать django-hitcount в своем блоге. Я мог бы работать с подсчетом просмотров, но на моей странице администрирования возникает ошибка доступа. После кода и изображения ошибки: Спасибо.
- urls.py
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from django.urls import path, include
from blog.views import index, blog, post
urlpatterns = [
path('admin/', admin.site.urls),
path('', index, name='home'),
path('blog/', blog, name='post-list'),
path('post/<id>/', post, name='post-detail'),
path('ckeditor', include('ckeditor_uploader.urls')),
path('hitcount/', include(('hitcount.urls', 'hitcount'), namespace='hitcount')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- views.py
from django.shortcuts import render, get_object_or_404, redirect, reverse
from .models import Post, Author
from django.db.models.aggregates import Count
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from hitcount.models import HitCount
from hitcount.views import HitCountMixin
...
def post(request, id):
category_count = get_category_count()
most_recent = Post.objects.order_by('-timestamp')[:3]
popular_posts = Post.objects.order_by('-hit_count_generic__hits')[:3]
post = get_object_or_404(Post, id=id)
hit_count = HitCount.objects.get_for_object(post)
hit_count_response = HitCountMixin.hit_count(request, hit_count)
count_hit = True
if request.method == "POST":
return redirect(reverse("post-detail", kwargs={
'id': post.pk
}))
context = {
'post': post,
'hit_count': hit_count,
'category_count': category_count,
'popular_posts': popular_posts,
'views': Post.objects.get(pk=1),
# views.hit_count.hits
# views.hit_count.hits_in_last(days=7)
}
return render(request, 'blog/post.html', context)
- post.html
{% extends 'blog/base.html' %}
{% load static %}
{% load hitcount_tags %}
{% block content %}
<body>
<div class="container">
<div class="row">
<div class="col-md-8">
<div>
<div class="" >
<div class="card mb-3">
<img src="{{ post.thumbnail.url }}" class="card-img-top with:"100%"" alt="...">
<div class="card-body">
<h5 class="card-title">{{ post.title }}</h5>
<img src="{{ post.author.profile_picture.url}}" alt="..." class="rounded-circle width="40" height="40"" >
<p>{{ post.author }} | <i class="far fa-clock"></i> {{ post.timestamp|timesince }} ago | <i class="far fa-eye"> {% get_hit_count for post %} views</i></p>
<div>
<hr class="my-4">
<p class="card-text">{{ post.content|safe }}</p>
</div>
<p class="card-text"><small class="text-muted">{{ post.timestamp}}</small></p>
</div>
</div>
</div>
</div>
</div>
<!--Side Bar-->
{% include 'blog/sidebar.html' with most_recent=most_recent category_count=category_count %}
</div>
</div>
</body>
1 ответ
Можете ли вы поделиться своим admin.py, связанным с этой моделью? Потому что у меня была такая же проблема, и я исправил ее в admin.py.
Как я исправил свою проблему в файле admin.py:
class PostAdmin(admin.ModelAdmin):
list_display = ('id', 'baslik', 'kategori', 'slug', 'taslakDurumu', 'formatted_hit_count')
def formatted_hit_count(self, obj):
return obj.current_hit_count if obj.current_hit_count > 0 else '-'
formatted_hit_count.admin_order_field = 'hit_count'
formatted_hit_count.short_description = 'Hits'
это было так, и появилась такая же ошибка, поэтому я добавил () и работал. Так:
def formatted_hit_count(self, obj):
return obj.current_hit_count() if obj.current_hit_count() > 0 else '-'
formatted_hit_count.admin_order_field = 'hit_count'
formatted_hit_count.short_description = 'Hits'
admin.site.register(Post, PostAdmin)