HttpResponseRedirect(reverse("xxx")) 出现NoReverseMatch错误
在应用app的views.py中,用HTTPResponseRedirect重定向reverse反向解析函数的url出现如下NoReverseMatch错误:
from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect
from django.http import HttpResponse
import os
from app.forms import MomentForm, CommentForm
from django.urls import reverse
from django.views.decorators.csrf import csrf_exempt
# Create your views here.
def welcome(request):
return HttpResponse("<h1>Welcome to my site!nige sb POST提交成功!</h1>")
@csrf_exempt #暂时屏蔽csrf
def moments_input(request):
if request.method == 'POST':
form = MomentForm(request.POST)
if form.is_valid():
print("posting!")
moment = form.save()
moment.save()
return HttpResponseRedirect(reverse("app.views.welcome"))
# return HttpResponse("<h1>Welcome to my site!nige sb POST提交成功!</h1>")
else:
form = MomentForm()
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
return render(request, os.path.join(PROJECT_ROOT, 'app/templates', 'moments_input.html'), {'form':form})
当表单提交时,会出现如下错误:
原因是因为reverse的使用方法的错误,下面是reverse的函数定义:
reverse
(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
viewname为views.py中视图函数名即可,无需加""号,我的解决方法就是将reverse("app.views.welcome")改成reverse(welcome)即可