使用 redirect() 时视图没有 return HttpResponse 对象
The view didn't return an HttpResponse object when use redirect()
我尝试创建模型表单以在 Django 中向我的模型添加新记录,但出现此错误:
The view post.views.add_job_resume didn't return an object. It returned None instead.
这是我的文件(请注意,在这个文件中我的代码比我在这里写的要多):
view.py
def add_job_resume(request):
if request.method=="POST":
form = AddJobForm(request.POST)
if form.is_valid():
job_resume = form.save(commit=False)
job_resume.user= request.user
job_resume.save()
return redirect('view_job_resume')
else:
form = AddJobForm()
return render(request, 'education/job_research_education_records/job_resume/add_job_resume.html', {'form': form})
forms.py
class AddJobForm(ModelForm):
class Meta:
model = JobRecord
fields = [
'title',
'explains',
'post',
'organization',
'time_start',
'time_end',
'upload_url',
]
models.py
class JobRecord(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT)
title = models.TextField(max_length=250, blank=False)
explains = models.TextField(max_length=500, blank=True)
post = models.TextField(max_length=100, blank=False)
organization = models.TextField(max_length=100, blank=False)
time_start = models.TextField(max_length=100)
time_end = models.TextField(max_length=100)
upload_url = models.FileField(upload_to='job-resume-files/')
def __str__(self):
return self.title
add_job_resume.html
<form method="post" >
{% csrf_token %}
{{form.as_p }}
<button type="submit" class="btn btn-info">add</button>
</form>
urls.py
urlpatterns = [
path('edu/resume/job/', views.view_job_resume, name='view_job_resume'),
path('edu/resume/job/add', views.add_job_resume, name='add_job_resume')]
我搜索了很多这个错误,但我无法解决!到底是怎么回事?
重定向不是问题。问题是您的表单无效,如果发生这种情况,视图不会发生任何变化
你应该取消最后一行的缩进一级,这样它就能捕捉到这种情况。
这与redirect(..)
本身无关。您只是忘记了 代码路径 。有可能该方法确实是 POST,但该形式无效。所以第一个 if
中的条件满足,但第二个 if
中的条件不满足。现在,对于这种情况,您的视图 return 没有任何内容(因此 return None
)。
简单地重新渲染模板是很常见的,但现在表单无效,这样表单就可以显示错误,例如:
def add_job_resume(request):
if request.method=="POST":
form = AddJobForm(request.POST)
if form.is_valid():
job_resume = form.save(commit=False)
job_resume.user= request.user
job_resume.save()
return redirect('view_job_resume')
else:
form = AddJobForm()
# Not placed under the else
return render(
request,
'education/job_research_education_records/job_resume/add_job_resume.html',
{'form': form}
)
请注意 render
而不是 放在 else
部分下面。事实上,无论方法是 POST 并且表单无效,还是方法是 不是 POST,我们都会渲染页面并以渲染后的页面响应。
我尝试创建模型表单以在 Django 中向我的模型添加新记录,但出现此错误:
The view post.views.add_job_resume didn't return an object. It returned None instead.
这是我的文件(请注意,在这个文件中我的代码比我在这里写的要多):
view.py
def add_job_resume(request):
if request.method=="POST":
form = AddJobForm(request.POST)
if form.is_valid():
job_resume = form.save(commit=False)
job_resume.user= request.user
job_resume.save()
return redirect('view_job_resume')
else:
form = AddJobForm()
return render(request, 'education/job_research_education_records/job_resume/add_job_resume.html', {'form': form})
forms.py
class AddJobForm(ModelForm):
class Meta:
model = JobRecord
fields = [
'title',
'explains',
'post',
'organization',
'time_start',
'time_end',
'upload_url',
]
models.py
class JobRecord(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT)
title = models.TextField(max_length=250, blank=False)
explains = models.TextField(max_length=500, blank=True)
post = models.TextField(max_length=100, blank=False)
organization = models.TextField(max_length=100, blank=False)
time_start = models.TextField(max_length=100)
time_end = models.TextField(max_length=100)
upload_url = models.FileField(upload_to='job-resume-files/')
def __str__(self):
return self.title
add_job_resume.html
<form method="post" >
{% csrf_token %}
{{form.as_p }}
<button type="submit" class="btn btn-info">add</button>
</form>
urls.py
urlpatterns = [
path('edu/resume/job/', views.view_job_resume, name='view_job_resume'),
path('edu/resume/job/add', views.add_job_resume, name='add_job_resume')]
我搜索了很多这个错误,但我无法解决!到底是怎么回事?
重定向不是问题。问题是您的表单无效,如果发生这种情况,视图不会发生任何变化
你应该取消最后一行的缩进一级,这样它就能捕捉到这种情况。
这与redirect(..)
本身无关。您只是忘记了 代码路径 。有可能该方法确实是 POST,但该形式无效。所以第一个 if
中的条件满足,但第二个 if
中的条件不满足。现在,对于这种情况,您的视图 return 没有任何内容(因此 return None
)。
简单地重新渲染模板是很常见的,但现在表单无效,这样表单就可以显示错误,例如:
def add_job_resume(request):
if request.method=="POST":
form = AddJobForm(request.POST)
if form.is_valid():
job_resume = form.save(commit=False)
job_resume.user= request.user
job_resume.save()
return redirect('view_job_resume')
else:
form = AddJobForm()
# Not placed under the else
return render(
request,
'education/job_research_education_records/job_resume/add_job_resume.html',
{'form': form}
)
请注意 render
而不是 放在 else
部分下面。事实上,无论方法是 POST 并且表单无效,还是方法是 不是 POST,我们都会渲染页面并以渲染后的页面响应。