我正在尝试在我的django应用程序中构建ajax注释。注释写在TextField()中,其名称=“comments_text”和class =“comment_text。因此,要获取我尝试ajax_comment = request.POST.get('comment_text')
的输入文本。但是由于某种原因,这会返回None
。这是我的代码:
models.py
class Comments(models.Model):
comment_id = models.IntegerField()
parent_id = models.IntegerField()
comment_text = models.TextField(max_length=350, blank=True)
forms.py
class CommentForm(forms.ModelForm):
class Meta:
model = Comments
fields = [
'comment_text'
]
views.py
def article(request, category, id):
...
comment = CommentForm(request.POST or None)
ajax_comment = request.POST.get('comment_text')
print(ajax_comment) #returns None
if request.is_ajax(): #True
if comment.is_valid(): # True
ajax_comment = request.POST.get('comment_text')
print(ajax_comment) #returns None
return HttpResponse('Something')
context = {
'comment': comment,
}
return render(request, 'article.html', context)
模板
<div class="commentsContainer">
<form action="" class="comment_form">{% csrf_token %}
{{ comment.comment_text|add_class:"comment_text" }}
<input type="submit" value="Comment" class="comment_submit">
</form>
<div class="comment_div">
<h3>Username1</h3>
<p>Something</p>
</div>
</div>
base.js
$('.comment_form').on('submit', function(e) {
e.preventDefault();
var url = window.location.href.split('?')[0];
console.log(url); // this works fine
$.ajax({
type: 'POST',
url: url,
dataType: 'json',
data: {
text: $('.comment_text').val(),
csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(),
},
success: function(text) {
$('.comment_div').append("<div class='comment_div'><h3>username</h3><p>" + text + "</p></div>");
console.log(text); // text=something&csrfmiddlewaretoken=sWJashvQgbKG9hM0imiFTjj3EQrCP5qRfq60XraoQK1SULlPumJonyMktt9DllEC
}
})
});
有什么想法吗?
答案 0 :(得分:1)
检查浏览器的网络标签中的Ajax请求标头。它可能要么不传递参数'text'
要么传递text = ''
在任何一种情况下,答案都是none
。
可能的原因是在ajax请求期间text: $('.comment_text').val(),
没有获得所需的值(因为。comment_text
类不存在; Django模板是否添加了class属性?)。因此, Django View 未收到要在控制台上打印的text
值。
此外,您的ajax请求与Django View之间存在不一致。
<强> views.py 强>
ajax_comment = request.POST.get('comment_text')
<强> base.js 强>
data: {
text: $('.comment_text').val(),
base.js - 修订
data: {
comment_text: $('.comment_text').val(),