【问题标题】:Django2.0; still cannot get how redirect worksDjango2.0;仍然无法了解重定向的工作原理
【发布时间】:2018-06-30 01:09:10
【问题描述】:

我是 Django 新手,但我仍然不明白重定向的工作原理。

目前,我使用这种方式进行重定向。

return HttpResponseRedirect(reverse_lazy('main:index'))

这种方式有效。

现在我正在创建另一个页面,我想做的是在提交表单数据后重定向到同一页面。

view.py 是这样的

def add_comment(request, pk):

    entry = Entry.objects.get(id=pk)

    if request.method != 'POST':
        form = CommentForm()
    else:
        form = CommentForm(request.POST)

        if form.is_valid():
            new_comment = form.save(commit=False)
            new_comment.user = request.user
            new_comment.save()


            return redirect('add_comment', pk=entry.id)
    return render(request, 'main/add_comment.html', {'form': form, 'entry': entry, 'comments': comments})

urls.py 是这样的

path('add_comment/<int:pk>', views.add_comment, name='add_comment'),

我可以进入这个页面,但是我提交表单后出现这个错误。

/add_comment/5 处的 NoReverseMatch

找不到“add_comment”的反向。 'add_comment' 不是有效的视图函数或模式名称。

请求网址: http://127.0.0.1:8000/add_comment/5

即使我可以进入这个 url 页面,我也无法重定向到同一页面。

我怎么错了?还有推荐的重定向到页面的方法是什么?

【问题讨论】:

  • 旁注您确定模型填写正确吗?向模型添加更多信息后,您需要致电new_comment.save()。如果您没有正确填写模型,则可能无法在该点导航到它。当您导航到您确定有效的页面时,重定向是否有效,即//google.com
  • 哎呀,对不起,我在这里发布代码时删除了该行。

标签: python django


【解决方案1】:

你可能需要改变这个:

return redirect('add_comment', pk=entry.id)

到这里:

return redirect('main:add_comment', pk=entry.id))

假设您所有的 URL 都在同一个命名空间中。如果您的 index 网址与您的 add_comment 网址在同一个列表中定义,那么它们将共享 main 命名空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2014-04-08
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2016-02-20
    相关资源
    最近更新 更多