Seite 1 von 1

django - comments modul problem formular variablen füllen

Verfasst: Dienstag 23. Dezember 2008, 18:08
von robert_grah
hallo zusammen,

ich arbeite gerade das django buch von packtpublishing durch. bis jetzt hat alles einigermaßen gut geklappt.
jetzt geht es darum kommentare zu einem bookmark zu erstellen.

leider wird in dem buch noch eine ältere django version benutzt ich benutze die neueste stabile. ic glaube ich habe alle objekte nach neuem standart umbenannt und das formular wird auch richtig angezeigt jedoch werden die replacement tags im formular nicht richtig gefüllt. und beim absenden des formulars gibt es eine fehlermeldung weil parameter fehlen.

hier einmal das template für das formular:

Code: Alles auswählen

{% if user.is_authenticated %}
  <form action="/comments/post/" method="post">
    <p><label>Post a comment:</label><br />
    <textarea name="comment" rows="10"
      cols="60"></textarea></p>
    <input type="hidden" name="options"
      value="{{ options }}" />
    <input type="hidden" name="target" value="{{ target }}" />
    <input type="hidden" name="gonzo" value="{{ hash }}" />
    <input type="submit" name="post" value="submit comment" />
  </form>
{% else %}
  <p>Please <a href="/login/">log in</a> to post comments.</p>
{% endif %}
in diesem formular müßten vom comments modul die tags {{ target }}, {{ hash }} und {{ options }} durch die richtigen werte erstezt werden, dies geschieht aber leider nicht.
an diesem punkt komme ich nicht weiter.

das formular forder ich aus dem bookmark mit folgendem befehl an:

Code: Alles auswählen

{% render_comment_form for bookmarks.sharedbookmark shared_bookmark.id %}
ich könnte mir vorstellen das ich das falsche objekt übergebe oder sowas in der art. ich wäre euch dankbar wenn ihr mir einen tip geben könntet was falsch sein könnte.

grüße
robert

Verfasst: Dienstag 23. Dezember 2008, 23:44
von Dauerbaustelle
Zeig doch mal deine view her. Und sämtliche Errormessages die du bekommst ;)

Verfasst: Mittwoch 24. Dezember 2008, 00:11
von robert_grah
na klar, ich wollte euch nicht bombardieren, deswegen hatte ich das noch nicht getan. der view, ganz simpel:

Code: Alles auswählen

def bookmark_page(request, bookmark_id):
  shared_bookmark = get_object_or_404(
    SharedBookmark,
    id=bookmark_id
  )
  variables = RequestContext(request, {
    'shared_bookmark': shared_bookmark
  })
  return render_to_response('bookmark_page.html', variables)
die fehlermeldung:

Code: Alles auswählen

Comment post not allowed (400)
Why: 	Missing content_type or object_pk field.
das template für die anzeige:

Code: Alles auswählen

{% extends "base.html" %}
{% load comments %}
{% block title %}Bookmark:  
     {{ shared_bookmark.bookmark.title|escape }}{% endblock %}
{% block head %}
  <a href="/vote/?id={{ shared_bookmark.id }}"
    class="vote">[+]</a>
  <a href="{{ shared_bookmark.bookmark.link.url }}" class="title">
  {{ shared_bookmark.bookmark.title|escape }}</a>
{% endblock %}
{% block content %}
  Posted By: 
  <a href="/user/{{ shared_bookmark.bookmark.user.username }}/" 
     class="username">
    {{ shared_bookmark.bookmark.user.username }}</a> |
  <span class="vote-count">Votes: {{ shared_bookmark.votes }}</span>
  <h2>Comments</h2>
  {% get_comment_count for bookmarks.sharedbookmark shared_bookmark.id as comment_count %}
  {% get_comment_list for bookmarks.sharedbookmark shared_bookmark.id as comment_list %}
  {% for comment in comment_list %}
    <div class="comment">
      <p><b>{{ comment.user.username }}</b> said:</p>
      {{ comment.comment|escape|urlizetrunc:40|linebreaks }}
    </div>
  {% endfor %}
  <p>Number of comments: {{ comment_count }}</p>
  {% render_comment_form for bookmarks.sharedbookmark shared_bookmark.id %}
{% endblock %}
und dann noch das template fürs formular:

Code: Alles auswählen

{% if user.is_authenticated %}
  <form action="/comments/post/" method="post">
    <p><label>Post a comment:</label><br />
    <textarea name="comment" rows="10"
      cols="60"></textarea></p>
    <input type="hidden" name="options"
      value="{{ options }}" />
    <input type="hidden" name="target" value="{{ target }}" />
    <input type="hidden" name="gonzo" value="{{ hash }}" />
    <input type="submit" name="post" value="submit comment" />
  </form>
{% else %}
  <p>Please <a href="/login/">log in</a> to post comments.</p>
{% endif %}

Verfasst: Mittwoch 24. Dezember 2008, 12:00
von Dauerbaustelle
In dem von dir gezeigten Code (view) übergibst keine der genannten Variablen hash, target,..

Verfasst: Mittwoch 24. Dezember 2008, 13:54
von robert_grah
jo das stimmt, das sollte ja soweit ich das richtig vertsanden habe von dem comment modul geregelt werden. außerdem wüßte ich auch nicht genau was ich darein replacen soll. oder gibts da einen standart?

edit: habs jetzt einigermaßen zum laufen gebracht indem ich:

Code: Alles auswählen

{% get_comment_form for bookmarks.sharedbookmark shared_bookmark.id as form %}
statt dem render gewählt habe. allerdings werden jetzt felder angezeigt die ich nicht brauche weil ein user sowieso registriert sein muß um zu posten.
weiß jemand wie ich diese reduzieren kann? kann man dafür evtl einfach eine form klasse anlegen? da hat die doku nicht wirklich viel info, oder übersehe ich da etwas?

Verfasst: Mittwoch 24. Dezember 2008, 16:48
von Dauerbaustelle
WAS genau willst du nochmal? Irgendwie redest du wirres Zeug (oder ich fasse es als solches auf).

Geh doch einfach mal das Tutorial durch.

Falls du zB die Variable `foo` in einem Template nutzen willst, musst du das so machen:

Code: Alles auswählen

def myview(request):
    return render_to_response('mytemplate.html', {'foo' : 42})

Code: Alles auswählen

{{ foo }}

Verfasst: Mittwoch 24. Dezember 2008, 20:17
von robert_grah
hi dauerbaustelle,

das ist mir bekannt danke. ich benutze allerdings das comments modul aus
'django.contrib.comments' dieses wird im template integriert mit den folgenden tags.
soweit ich das richtig verstanden habe.

Code: Alles auswählen

{% load comments %}
{% get_comment_form for bookmarks.sharedbookmark shared_bookmark.id as form %}
das klappt ja auch gut. nur würde ich jetzt gerne das formular welches integriert wird, anpassen. finde aber zu dem thema keine infos in der doku.

Verfasst: Mittwoch 24. Dezember 2008, 20:21
von Leonidas
Du musst einfach ``comments/form.html`` in deiner Applikation überschreiben, das ist alles.

Verfasst: Donnerstag 25. Dezember 2008, 02:33
von robert_grah
ich kann form.html sogar löschen und es funktioniert immer noch.
wird bei

Code: Alles auswählen

{% load comments %}
{% get_comment_form for bookmarks.sharedbookmark shared_bookmark.id as form %}
das formular nicht generiert?
wenn ich

Code: Alles auswählen

{% render_comment_form for event %}
benutzen würde, würde das form.html eingebunden oder?
keine ahnung, ich bau das feature einfach mal wieder aus...danke für eure hilfe