Profile for
miracle2k
| Name | miracle2k |
|---|---|
| Email Address | hidden |
| Avatar | |
| Posts | 6 |
-
- 2008-02-20 04:07:55
- Re: user.is_authenticated in templates
- Board >> Django das Framework >> Anleitungen / Howto's
-
Die Methode macht in der Shell keinen Sinn. Ein User-Objekt gibt hier immer True zurück. Wenn ein User allerdings während einem Request nicht eingeloggt ist, dann enthält request.user keinen "echten" User, sondern eine AnonymousUser-Instanz, die stattdessen immer False zurückgibt.
-
- 2007-11-20 21:57:10
- Re: Django Webseiten aus DE
- Board >> Off-Topic >> Off-Topic
-
- 2007-11-14 17:45:41
- Re: Comments bei einem Blog
- Board >> Django das Framework >> Probleme & Fragen
-
return HttpResponseRedirect('/blog/%s/' % entry_slug)
Das kann man übrigens besser schreiben mit reverse()
http://www.djangoproject.com/documentation/url_dispatch/#reversereverse(detail, kwargs={'slug': entry_slug})
Die URL wird dann automatisch aus den urlpatterns erstellt - sprich keine Duplizierung, wenn man die URL ändert muss man nicht alle Redirects anpassen.Das Kommentar sollte schon automatisch dem richtigen post zugeordnet werden, und nicht beim schreiben auswählbar sein.
Es gibt verschiedene Möglichkeiten aus der Form zu entfernen. Am einfachsten ist wohl editable=False beim Feld im Model zu setzen, dann wird es gar nicht erzeigt. Alternativ kann man den callback von form_for_* verwenden, oder das Feld einfach löschen, nachdem die Form erzeugt wurde (aber wohl nicht so optimal):del form.fields['post'] # als instanz del CommentFormClass.base_fields['post'] # als klasse
und dann wie ich schon gepostet hatte, die Form nicht sofort abspeichern.if form.is_valid(): comment = form.save() comment.post = entry comment.save() ...
-
- 2007-11-14 03:24:21
- Re: Etwas zum starten....
- Board >> Django das Framework >> Anleitungen / Howto's
-
Mich würden speziell deutschsprachige Blogs interessieren. Abgesehen von Tim Adler, gibt es sonst noch jemanden?
-
- 2007-11-14 03:19:36
- Re: Comments bei einem Blog
- Board >> Django das Framework >> Probleme & Fragen
-
Nur weiß ich jetzt halt nicht wie genau die def postcomment() aussehen muss.Du hast irgendwo einen View, der das Formular als HTML ausgibt. Das Formular ruft beim Abschicken dann die Seite auf, die angegeben ist, und übergibt die Daten per POST.
<form action="ziel-url">
Hinter dieser URL muss dann ein Django-View stehen der die POST Daten ausliest und den Kommentar abspeichert. Das kann auch derselbe sein, der das Formular angezeigt hat. Je nach dem wie man es also implementiert brauchst du entweder zwei Views (einem zum Anzeigen, einen als Abschicken-Ziel), oder nur einen. In letzterem Fall kannst du mitif request.method == 'POST': # abgeschickt else: # formular anzeigen
unterscheiden. Am Ende musst du die Formulardaten in eine Instanz deines Comment-Models übertragen. Ich glaube die besten Beispiele findet man in Blogs, zum Beispiel:
http://weblog.bignerdranch.com/?p=31
Angenommen, man verwendet nur einen view zum Kommentar-anzeigen und Abschicken (bei einem Blog könnte das z.b. der artikel_detail view sein, der den Blogartikel inklusive Kommentarfeld anzeigt.def artikel_detail(request, artikel_id): # informationen zum blog artikel holen artikel = BlogEntry.objects.get(pk=artikel_id) ..... # kommentarform vorbereiten CommentFormClass = forms.form_for_model(CommentModel) # im post mode das abgeschickte auswerten if request.POST: form = CommentFormClass(request.POST) # auf gültigkeit prüfen. wenn die form ungültig ist (z.b. feld fehlt), dann wird als nächte # anweisung render_to_response() mit der geprüften, ungültigen form (die dann, mit dem # richtigen template, automatisch die fehler markieren würde - weil sie weiß dass sie # geprüft wurde und was schief ging). if form.is_valid(): # comment enthält jetzt die Instanz des CommentModel comment = form.save() # Alternative zum vorherigen, um zum beispiel den autor automatisch zu setzen comment = form.save(commit=False) comment.author = request.user comment.save() # zum aktuellen artikel "zurück-weiterleiten". das sorgt dafür dass wir a) wieder mit einer # leeren form starten, und b) der benutzer nicht mit f5 den kommentar aus versehen # dupliziert (weil die POST daten dann weg sind). die url würde in dem fall eigentlich die gleiche # bleiben. return HttpResponseRedirect('blog_artikel_url') # ohne POST einfach eine leere form anzeigen, die der user verwenden kann else: form = CommentFormClass() # ausgeben return render_to_response('Add_Item.html', {'form': form, 'artikel': artikel, ...})
Übrigens hat Django ja auch eine Comment-App, allerdings habe ich die nie verwendet.
-
- 2007-11-14 03:01:48
- Re: Comments bei einem Blog
- Board >> Django das Framework >> Probleme & Fragen
-
Also bei mir hab ich das folgendermaßen gemacht, in der views.py:
def foo(request) if request.method == 'POST': form = CommentForm(request.POST) if request.POST['captcha'] == request.session.get('captcha', ''): form.captcha_error = False if form.is_valid(): form_data = form.data comment = Comment() comment.subject = form_data['subject'] comment.name = form_data['name'] comment.homepage = form_data['homepage'] comment.email = form_data['email'] comment.message = form_data['message'] comment.blogentry_id = blogentry.id comment.remote_address = "127.0.0.1" comment.save() form = CommentForm()
Das solltest du eigentlich auch kürzer schreiben können, wenn du form_for_model() oder form_for_instance() verwendest, anstatt CommentForm selber zu definieren:def foo(request) if in_edit_mode: CommentForm = form_for_instance(existierender_comment) else: CommentForm = form_for_model(Comment) .... if request.method == 'POST': form = CommentForm(request.POST) if request.POST['captcha'] == request.session.get('captcha', ''): form.captcha_error = False if form.is_valid(): comment = form.save()
