2010-08-04 4 views

Antwort

9

Es gibt eine Django-App für dieses Problem namens django-hitcount. Es ist einfach zu verwenden und in jedem Ihrer Projekte wiederverwendbar.

+0

seine guten Werkzeuge ich benutzte es sehr vielen Dank – mohammadmonther

+0

gute App, vielen Dank! – inoks

9

Ein "Seitenzähler" ist was? Ein persistenter Datenbestand, der von View-Funktionen aktualisiert und von einer Vorlage angezeigt wird.

Wie Sie sicherlich bereits wissen, haben alle Django-Dinge die folgenden Teile.

  1. Modell
  2. View-Funktion
  3. Vorlage

Modell

Wenn Sie den Seitenzähler in der Datenbank behalten wollen, müssen Sie ein Modell Django.

class PageCounter(Model): 

Sie müssen eine Zeile in dieses Modell einfügen. Normalerweise wird ein "Fixture" dabei helfen, da es eine Zeile ist und Sie es nur einmal eingeben, wenn Sie eine Syncdb machen.

View-Funktion

Dann müssen Sie den Seitenzähler in Ihrer View-Funktion holen und zu aktualisieren.

pageCounter= PageCounter.objects.all()[0] 
pageCounter.count += 1 
pageCounter.save() 

Vorlage

Nun müssen Sie den Wert auf Ihre Vorlagen liefern, damit es angezeigt werden kann.

+0

Vielen Dank für diese Idee ... – mohammadmonther

+3

Was ist mit Seitenauffrischungen? – maazza

+0

yeah @Lott was ist mit Seitenaktualisierungen, können wir tun -> erstellen Sie ein Feld mit vielenTransaktion mit Benutzer in der Post und inkrementieren den Benutzerzähler in der Detailansicht des Beitrags, dann können wir die Ansichten zeigen, indem Sie nur die Anzahl von den Benutzern im Feld, aber das funktioniert nicht für anonymer Benutzer – babygame0ver

1

Ich weiß, dies ist ein alter Beitrag, aber gelegentlich Leute könnten die gleiche Frage haben.

Wenn Sie einen Dritten Bibliothek zu vermeiden und die Zähler verhindern auf jeder Seite aktualisiert aktualisieren Sie die folgende Mixin (auf S. Lott Antwort Gebäude) tun könnte

class BlogPostCounterMixin(object): 
    def get_context_data(self, **kwargs): 
     context = super(BlogPostCounterMixin, self).get_context_data(**kwargs) 
     blog_post_slug = self.kwargs['slug'] 
     if not blog_post_slug in self.request.session: 
      bp = BlogPost.objects.filter(slug=blog_post_slug).update(counter=+1) 
      # Insert the slug into the session as the user has seen it 
      self.request.session[blog_post_slug] = blog_post_slug 
    return context 

Es wenn das zugegriffen Modell überprüft wurde in der Sitzung gespeichert. Wenn es in der Sitzung gespeichert wurde, wird das Inkrementieren übersprungen, andernfalls erhöht es den Zähler und fügt der Sitzung den Block des Modells hinzu, wodurch Inkremente für Seitenaktualisierungen verhindert werden.

Hinweis: Dies ist ein Mixin, den Sie in Ihrer Ansicht hinzufügen müssen.

Verwandte Themen