Python Django:禁止(CSRF令牌丢失或不正确。)

Python Django:禁止(CSRF令牌丢失或不正确。),python,django,Python,Django,我的django版本是1.11.4,我正在书中做一个简单的练习,我需要制作一个网页,人们可以提交他们对所选餐厅的评论 但它显示消息禁止(CSRF令牌丢失或不正确)。 views.py: def comments(request, id): if id != 0: r = Restaurant.objects.get(id = id) else: return HttpResponseRedirect('/restaurantsList/')

我的django版本是1.11.4,我正在书中做一个简单的练习,我需要制作一个网页,人们可以提交他们对所选餐厅的评论

但它显示消息
禁止(CSRF令牌丢失或不正确)。

views.py:

def comments(request, id):
    if id != 0:
        r = Restaurant.objects.get(id = id)
    else:
        return HttpResponseRedirect('/restaurantsList/')

    if request.POST:
        dateTime = timezone.localtime(timezone.now())
        Comment.objects.create(
                content = request.POST['content'],
                visitor = request.POST['visitor'],
                email = request.POST['email'],
                dateTime = dateTime,
                restaurant = r
        )

    return render_to_response('comments.html', locals(), RequestContext(request))
comments.html:

<!doctype html>
<html>
<head>
    <title>Comments</title>
    <meta charset='utf-8'>
</head>

<body>
    <h2>Comments for {{ r.name }}</h2>

    {% if r.comment_set.all %}
        <p>We have {{ r.comment_set.all | length }} comments</p>

        <table>
            <tr>
                <th>Visitor</th>
                <th>Time</th>
                <th>Comment</th>
            </tr>

            {% for c in r.comment_set.all %}
                <tr>
                    <td>{{ c.visitor }}</td>
                    <td>{{ c.dateTime | date:'F j, Y' }}</td>
                    <td>{{ c.content }}</td>
                </tr>
            {% endfor %}
        </table>
    {% else %}
        <p>No comment</p>
    {% endif %}

    <br /><br />

    <form action='' method='post'> {% csrf_token %}
        <table>
            <tr>
                <td><label for='visitor'>Visitor: </label></td>
                <td><input id='visitor' type='text' name='visitor'></td>
            </tr>
            <tr>
                <td><label for='email'>E-mail: </label></td>
                <td><input id='email' type='text' name='email'></td>
            </tr>
            <tr>
                <td><label for='content'>Comment: </label></td>
                <td>
                    <textarea id='content' rows='10' cols='48'
                    name='content'></textarea></td>
                </td>
            </tr>
        </table>
        <input type='submit' value='Submit'>
    </form>
</body>

评论
{{r.name}的注释
{%if r.comment\u set.all%}
我们有{r.comment_set.all | length}个注释

访客 时间 评论 {r.comment_set.all%} {{c.visitor}} {{c.dateTime}日期:'fj,Y'} {{c.content}} {%endfor%} {%else%} 无可奉告

{%endif%}

{%csrf_令牌%} 参观者: 电邮: 评论:

我在.html中添加了
{%csrf\u token%}
,在view函数中使用了
RequestContext(request)
,并尝试了几种从Internet搜索的方法。但它仍然不起作用


谁能帮我一个忙吗?谢谢

你应该使用一本更新的书
render_to_response
已弃用,此处不应使用
RequestContext
。此外,传递
局部变量
是一种可怕的反模式,尽管这不是问题的原因

return render(request, 'comments.html', {'r': r})

如果您正在寻找更多最新的教程,那么polling教程和Django Girls教程都是很好的起点:以及