django - comments modul problem formular variablen füllen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
robert_grah
User
Beiträge: 6
Registriert: Freitag 12. Dezember 2008, 20:41

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
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Zeig doch mal deine view her. Und sämtliche Errormessages die du bekommst ;)
robert_grah
User
Beiträge: 6
Registriert: Freitag 12. Dezember 2008, 20:41

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 %}
Zuletzt geändert von robert_grah am Mittwoch 24. Dezember 2008, 15:02, insgesamt 1-mal geändert.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

In dem von dir gezeigten Code (view) übergibst keine der genannten Variablen hash, target,..
robert_grah
User
Beiträge: 6
Registriert: Freitag 12. Dezember 2008, 20:41

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?
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

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 }}
robert_grah
User
Beiträge: 6
Registriert: Freitag 12. Dezember 2008, 20:41

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du musst einfach ``comments/form.html`` in deiner Applikation überschreiben, das ist alles.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
robert_grah
User
Beiträge: 6
Registriert: Freitag 12. Dezember 2008, 20:41

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
Antworten