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)
Другие вопросы по тегам