题
所以,我使用django.contrib.comments。我已经安装就OK了,但不是笨重的默认注释的形式,我想使用自定义表单模板,只是显示一个文本并提交按钮。
这样做的理由是,用户看到的只是形式,如果他们领域已经验证,我想要保持表和自动拿起自己的用户名等。
我已经实现了一个自定义窗体,但当我尝试提交它正在一个错误。
下面就是我在我与评论表单的页面模板(条目从视图中传递的对象):
{% load comments %}
{% render_comment_form for entry %}
这是我的HTML中/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 %}
它呈现好的开始,但是当我尝试提交评论的形式,我得到以下的Django错误:
Comment post not allowed (400)
Why: Missing content_type or object_pk field.
谁能帮助?
解决方案 2
通过从 Theju的应用解决了这一问题 - 特别是,见约书亚Works的评论对第2部分
。其他提示
注释模型使用一个通用的外键映射到针对有人评论说,如博客条目的对象。这些要求包括在标准注释形式隐藏字段。
从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)
...
如果你没有改变窗体类,并只希望更改HTML模板,那么你可以通过在所有的隐藏字段添加一个for循环包括这些领域。
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
不隶属于 StackOverflow