io vi mostrerò come ho risolto nel mio blog, in modo che si possa fare qualcosa di simile. I miei commenti sono per il modello Entry in applicazioni di voci.
Per prima cosa aggiungi un nuovo metodo per l'oggetto Entry (come).
def get_absolute_url(self):
return "/%i/%i/%i/entry/%i/%s/" % (self.date.year, self.date.month, self.date.day, self.id, self.slug)
Genera URL per gli oggetti di ingresso. Esempio URL:/2009/12/12/entry/1/Lorem ipsum-/
Per urls.py aggiungere 1 riga:
(r'^comments/posted/$', 'smenteks_blog.entries.views.comment_posted'),
Così ora si dovrebbe avere almeno 2 linee per commenti nel urls.py file.
(r'^comments/posted/$', 'smenteks_blog.entries.views.comment_posted'),
(r'^comments/', include('django.contrib.comments.urls')),
Per le voci (come) applicazione nel file di views.py aggiungere funzioni:
from django.contrib.comments import Comment #A
...
def comment_posted(request):
if request.GET['c']:
comment_id = request.GET['c'] #B
comment = Comment.objects.get(pk=comment_id)
entry = Entry.objects.get(id=comment.object_pk) #C
if entry:
return HttpResponseRedirect(entry.get_absolute_url()) #D
return HttpResponseRedirect("/")
- A) Importa sopra la pratica di avere accesso per un commento oggetto,
- B) ottenere COMMENT_ID modulo di richiesta,
- C) Fetch oggetto ingresso,
- D) Utilizzare il metodo get_absolute_url per effettuare il reindirizzamento corretto .
Ora: pulsante
- Share modulo di commento sul sito di ingresso reindirizza utente sullo stesso (ingresso) del sito.
- Il pulsante di post sul sito di anteprima reindirizza l'utente sul sito corretto (di accesso).
- Pulsante di anteprima nel modulo di commento sul sito di ingresso e sul sito di anteprima reindirizza l'utente sul sito di anteprima
- La pagina di ringraziamento non è più in uso (Quella pagina era piuttosto fastidiosa a mio parere).
La prossima cosa buona da fare è sovrascrivere l'anteprima.html template:
- Vai a dir django framework, sotto linux potrebbe da/usr/share/pyshared /.
- Get template preview.html originale da DJANGO_DIR/contrib/commenti/templates/commenti/preview.html
- copiarlo modelli direcotry nel progetto project_dir/templates/commenti/entries_preview.html
- Da ora in poi, sostituisce il modello predefinito. Puoi modificare l'estensione in questo modo: {% estende "your_pagelayout.html"%} per far funzionare il layout e tutti i file CSS.
Buon consiglio ... In realtà c'è un altro brutto reindirizzamento ... Per visualizzare in anteprima forma (soprattutto quando ci sono alcuni errori). Posso visualizzare errori nello stesso formato (senza aprire una nuova pagina) –
Ho sempre gli stessi problemi con i commenti. È un po 'più di lavoro, ma di solito finisco tutto con l'Ajax. Ho dirottato l'azione submit() del modulo e faccio un post alla vista di invio dei commenti. In questo modo puoi gestire gli errori senza uscire dalla pagina, reindirizzare dove vuoi o rimanere sulla pagina e inserire il nuovo commento nella lista in modo dinamico. C'è una app su bitbucket per aiutarti. Post del blog su http://brandonkonkle.com/blog/2009/oct/24/dry-ajax-comments/. Ecco un altro esempio: http://www.nomadjourney.com/2009/01/using-django-templates-with-jquery-ajax/ – Tom
Sono io o questa è una soluzione inflessibile? Questa soluzione consente di utilizzare i commenti di Django solo in un caso per l'intera applicazione. Supponiamo che tu crei una galleria fotografica, in particolare, non potrai utilizzare commenti su ogni foto a meno che non tratti ogni foto come post di un blog. – killerbarney