【问题标题】:get() unable to find POST dataget() 无法找到 POST 数据
【发布时间】:2017-01-14 02:02:11
【问题描述】:

我正在尝试在我的 django 应用程序中构建 ajax cmets。评论写在 TextField() 中,其中有一个 name="cmets_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
    }
})


});

有什么想法吗?

【问题讨论】:

  • 我在 JavaScript 中看不到 'comment_text'。您将评论文本发送为'text' - 请参阅data: { text: ... }
  • 谢谢它现在可以使用了。

标签: javascript jquery python ajax django


【解决方案1】:

在浏览器的Network 选项卡中检查Ajax 请求标头。它可能没有传递参数'text' 或传递text = ''

在任何一种情况下,响应都是none

可能的原因是在 ajax 请求期间 text: $('.comment_text').val(), 没有获得所需的值(因为 .comment_text 类不存在;Django 模板是否添加了类属性?)。因此 Django 视图 没有收到要在控制台上打印的 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(),

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2020-07-19
    相关资源
    最近更新 更多