2010-08-04 78 views

risposta

9

C'è un'app di Django per questo problema chiamato django-hitcount. È facile da usare e riutilizzabile in tutti i tuoi progetti.

+0

i suoi buoni strumenti sono usati grazie mille – mohammadmonther

+0

buona app, grazie mille! – inoks

9

Un "contatore di pagine" è cosa? Un dato persistente che viene aggiornato dalle funzioni di visualizzazione e visualizzato da un modello.

Come già saprete, tutte le cose di Django hanno le seguenti parti.

  1. Modello
  2. View Funzione
  3. Template

Modello

Se si desidera mantenere il contatore delle pagine nel database, è necessario un modello di Django.

class PageCounter(Model): 

È necessario inserire una riga in questo modello. Di solito un "fixture" aiuterà a fare questo, dato che è una riga e la si inserisce solo una volta quando si esegue un syncdb.

View Funzione

allora avete bisogno di recuperare e aggiornare il contatore pagina nel funzione di visualizzazione.

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

Template

Ora è necessario fornire il valore per i modelli in modo che possa essere visualizzato.

+0

grazie per questa idea ... – mohammadmonther

+3

cosa mi dice della pagina di aggiornamento? – maazza

+0

yeah @Lott per quanto riguarda gli aggiornamenti della pagina, possiamo fare come -> creare un campo con molte relazioni con l'utente nel post e incrementare il contatore utente nella visualizzazione dettagli del post, quindi possiamo mostrare le visualizzazioni semplicemente contando il numero degli utenti nel campo, ma che non funzionerà per l'utente anonimo – babygame0ver

1

So che questo è un vecchio post ma a volte le persone potrebbero avere la stessa domanda.

Se si vuole evitare una libreria di terze parti e impedire che il contatore viene aggiornato ad ogni aggiornamento della pagina è possibile effettuare le seguenti operazioni Mixin (edificio sulla risposta di S. Lott)

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 

Esso controlla se il modello di accesso è stato memorizzato nella sessione. Se è stato archiviato nella sessione, salta l'incremento, altrimenti incrementa il contatore e aggiunge lo slug del modello alla sessione impedendo incrementi per gli aggiornamenti della pagina.

Nota: questo è un Mixin che è necessario aggiungere alla vista.

Problemi correlati