如果answer不存在的话会导致无法访问对应的问题页面

answer不存在的话answer.id也会为None,报错导致整个页面都无法加载。
请问这里怎么写可以避免出现无法访问问题页面的问题?
20
收起
正在回答
1回答
同学,你好!可以在detail()视图函数中添加条件判断,若answer不存在,则跳转到新的页面去添加回答
answer.html:
{% extends 'base_layout.html' %}
{% from 'macro/form_errors.html' import form_field_errors %}
{% block title %}{{ super() }} - 写回答{% endblock %}
{% block header %}
<link rel="stylesheet" href="/assets/style/write.css">
{% endblock %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<form class="form-horizontal write-form" method="post"
enctype="multipart/form-data" action="{{ url_for('qa.detail', q_id=question.id) }}">
{{ form.csrf_token }}
<div class="form-group">
<button type="submit" class="btn btn-info pull-right">发布</button>
</div>
<div class="form-group">
{{ form.content }}
{{ ckeditor.load() }}
{{ ckeditor.config(name='content') }}
</div>
{{ form_field_errors(form.content.errors) }}
</form>
</div>
</div>
</div>
{% endblock %}视图函数:
@qa.route('/detail/<int:q_id>', methods=['GET', 'POST'])
def detail(q_id):
""" 问题详情 """
# 1. 查询问题信息
question = Question.query.get(q_id)
if not question.is_valid:
abort(404)
# 2. 展示第一条回答信息
answer = question.answer_list.filter_by(is_valid=True).first()
if not answer:
form = WriteAnswerForm()
if form.validate_on_submit():
if not current_user.is_authenticated:
flash('请先登录', 'danger')
return redirect(url_for('accounts.login'))
form.save(question=question)
flash('回答问题成功', 'success')
answer = question.answer_list.filter_by(is_valid=True).first()
return render_template('detail.html',question=question,answer=answer,form=form)
return render_template('answer.html', form=form, question=question)
else:
form = WriteAnswerForm()
if form.validate_on_submit():
try:
if not current_user.is_authenticated:
flash('请先登录', 'danger')
return redirect(url_for('accounts.login'))
form.save(question=question)
flash('回答问题成功', 'success')
return redirect(url_for('qa.detail', q_id=q_id))
except Exception as e:
print(e)
return render_template('detail.html',question=question,answer=answer,form=form)祝学习愉快!
Python全能工程师
- 参与学习 人
- 提交作业 16421 份
- 解答问题 4469 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星