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

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

https://img1.sycdn.imooc.com//climg/61d536cd09c8093409680148.jpg

answer不存在的话answer.id也会为None,报错导致整个页面都无法加载。

请问这里怎么写可以避免出现无法访问问题页面的问题?

正在回答

登陆购买课程后可参与讨论,去登陆

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)

祝学习愉快!

  • 小马小灰灰 提问者 #1
    怎样像以前一样直接显示没有回答的问题页面呢?
    2022-01-05 16:54:48
  • 好帮手慕美 回复 提问者 小马小灰灰 #2

    同学,你好!可以在js中添加条件判断

    https://img1.sycdn.imooc.com//climg/61d5690c09ed22e604750267.jpg

    祝学习愉快!

    2022-01-05 17:47:19
  • 按照上面的回答,编写了qa.views和模板detail.html的代码。回答,显示正常了。但是有评论的回答,评论内容无法显示,点击发布,上一页和下一页,无反应。



    2024-03-31 13:46:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师