代码之家  ›  专栏  ›  技术社区  ›  Jae_JPN

HTML不会将参数传递给缺少1个必需的位置参数的烧瓶

  •  0
  • Jae_JPN  · 技术社区  · 3 年前

    我想不出这个错误,我正在通过考试 chirp_id 从这个 <a href> 错误 TypeError: createCmt() missing 1 required positional argument: 'chirp_id'

    代码片段

    {% block content %}
    <div class="row">
        {% if chirp %}
    
        <h2>{{ chirp[1] }}</h2>
        <p>
            By : {{ chirp[2] }}
        </p>
        <p>
            {{ chirp[3] }}
        </p>
           
        <div>
            <a class="btn btn-success" href="{{ url_for('createCmt', chirp_id='{{ chirp[0] }}') }}"> + Comment </a>
        </div>
    
        {% else %}
        <h3>
            Invalid comment
        </h3>
        {% endif %}
    </div>

    按钮调用的URL是

    @app.route('/comment/create', methods=['GET', 'POST'])
    def createCmt(chirp_id):
        # check if user is logged in
        if not session:
            return redirect(url_for('login'))
    
        if request.method == 'POST':
            data = request.get_json() or {}
            if data.get('body'):
                user_id = session.get('user_id')
                body = data.get('body', '')            
    
                body = body.strip()
                sql_params = (chirp_id, user_id, body)
    
                conn = db_connection()
                cur = conn.cursor()
                sql = """
                    INSERT INTO commentary (chirp_id, user_id, body) VALUES (%d, %d, '%s')
                """ % sql_params
                cur.execute(sql)
                conn.commit()
                cur.close()
                conn.close()
                return jsonify({'status': 200, 'message': 'Success', 'redirect': '/'})
    
            return jsonify({'status': 500, 'message': 'No Data submitted'})
    
        return render_template('comment/create.html')

    这是否意味着 啁啾声 不是从学校传下来的吗 chirp_id='{{ chirp[0] }}' 在HTML中?或者我只是个傻瓜

    编辑

    这是我的创作。扩展到第一个html的html

    {% extends "comment/form.html" %}
    
    {% block title %}
    Create a Comment
    {% endblock %}
    
    {% block button %}
    <div class="row">
        <div class="offset-2 col-6">
            <button type="button" class="btn btn-success" name="btnCreate" id="btnCreate" onclick="createCUM()">Create</button>
        </div>
    </div>
    {% endblock %}

    以及获取主体值的javascript

    function createCUM(chirp_id) {
        var body = document.getElementById("body").value;
    
        axios({
            method: "POST",
            url: "/comment/create/" + chirp_id,
            data: {
                body: body,
            },
            headers: {
                "Content-Type": "application/json",
            }
        }).then(
            (response) => {
                var data = response.data;
                if (data.redirect) {
                    // redirect exists, then set the URL to the redirect
                    window.location.href = data.redirect;
                }
    
                if (data.status == 500) {
                    alert(data.error);
                    window.location.href = "/";  // redirect to home page
                }
            },
        )
    }
    1 回复  |  直到 3 年前
        1
  •  0
  •   Winmari Manzano    3 年前
    1. 你的@app。路线似乎缺少一个参数,你想按要求做吗
    @app.route("/comment/create/<chirp_id>", methods = ["GET", "POST"])
    
    1. 尝试将href更改为
    <a class="btn btn-success" href="{{ url_for('createCmt', chirp_id='{}'.format(chirp[0])) }}"> + Comment </a>
    

    附加编辑

    我试着运行它我做到了

    a href的路线

    @app.route("/test")
    def testing():
      return render_template("testerer.html", chirp_id = 123)
    

    去邮局的路线

    @app.route("/comment/create/<chirp_id>", methods = ["GET", "POST"])
    def createCmt(chirp_id):
      return f"{chirp_id}"
    

    HTML

      <a class="btn btn-success" href="{{ url_for('createCmt', chirp_id='{}'.format(chirp_id) ) }}"> + Comment </a>