如果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全能工程师
- 参与学习 人
- 提交作业 16233 份
- 解答问题 4470 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星