Frage

Also, ich bin mit django.contrib.comments. Ich habe es installiert OK, aber nicht den unhandlich Standardkommentar, würde Ich mag eine benutzerdefinierte Formularvorlage verwenden, die nur einen Textbereich zeigt und Submit-Button.

Die Logik dahinter ist, dass Benutzer nur die Form sehen, ob sie Gebiet bereits authentifizieren, und ich möchte das die Form einfach halten und ihre Benutzername usw. automatisch abholen.

Ich habe eine benutzerdefinierte Form implementiert, aber ich erhalte eine Fehlermeldung, wenn ich versuche, es zu senden.

Hier ist, was ich in meiner Vorlage für die Seite mit dem Kommentar-Formular habe (Eintrag das Objekt aus der Sicht übergeben wird):

{% load comments %}
{% render_comment_form for entry %}

Und hier ist mein HTML in /templates/comments/form.html:

{% if user.is_authenticated %}
    <p>Submit a comment:</p>
    <form action="/comments/post/" method="post">
    <textarea name="comment" id="id_comment" rows="2" style="width: 90%;"></textarea>
            <input type="hidden" name="options" value="{{ options }}" />
            <input type="hidden" name="target" value="{{ target }}" />
            <input type="hidden" name="gonzo" value="{{ hash }}" />
            <input type="hidden" name="next" value="{{ entry.get_absolute_url }}" /> 
             <span style="float:right;"><input type="submit" name="post" value="Add"></span>
    </form>
    {% else %}
        <p>Please <a href="/login/">log in</a> to post a comment.</p>
    {% endif %}

Es macht zunächst in Ordnung, aber wenn ich versuche, den Kommentar Formular abzuschicken, erhalte ich die folgenden Django Fehler:

Comment post not allowed (400)
Why:    Missing content_type or object_pk field.

Kann mir jemand helfen?

War es hilfreich?

Lösung 2

das Problem behoben, durch das Kopieren von Theju App - siehe insbesondere Joshua Works' Kommentar zu Teil 2

.

Andere Tipps

Das Kommentar-Modell verwendet einen generischen Fremdschlüssel für das Objekt abzubilden, für die der Kommentar wie ein Blog-Eintrag gemacht wurde. Diese werden benötigt, versteckte Felder in der Standardkommentar Form enthalten.

Von django.contrib.comments.models

...
class CommentSecurityForm(forms.Form):
    """
    Handles the security aspects (anti-spoofing) for comment forms.
    """
    content_type  = forms.CharField(widget=forms.HiddenInput)
    object_pk     = forms.CharField(widget=forms.HiddenInput)
...

Wenn Sie die Formularklasse geändert haben und wollen nur die HTML-Vorlage ändern, dann können Sie diese Felder sind durch eine for-Schleife über alle ausgeblendeten Felder hinzufügen.

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top