【问题标题】:Passing value <a> to decorator将值 <a> 传递给装饰器
【发布时间】:2018-09-17 00:48:51
【问题描述】:

我刚刚学习 Python,我正在使用 Flask,但我遇到了一个问题: 我尝试将值从一页传递给我的装饰器,但是这个值来自并且它没有 name 属性。 这是我的html:

<table border="4">
<tr>
    <td>ID</td>
    <td>Name</td>
    <td>Autor</td>
    <td>Year</td>
    <td>Genre</td>
    <td>Excluir</td>
    <td>Actualizar</td>
</tr>
{% for album in listalbumes %}
<tr>
    <td>{{ album._id }}</td>
    <td>{{ album.name }}</td>
    <td><a href="/artist/{{ album.autor }}" id="autor" >{{ album.autor }}</a></td>
    <td>{{ album.year }}</td>
    <td>{{ album.name_genre }}</td>
    <td><a href="/excluir/{{ album._id }}">X</a></td>
    <td><a href="/actualizar/{{ album._id }}">Actualizar</a></td>
</tr>
{% endfor %}

我尝试使用 id 传递 {{ album.autor }},但我不能。这是我的 py 代码:

@app.route('/artist/<string:autor>',  methods=['GET', 'POST'])
def artista(autor):
    autor = request.form.get("autor")
    alb = db.session.query(Album._id, Album.name, Album.autor, Album.year, 
    Album.media, Album.continent).filter(Album.autor == autor).all()
    if request.method == "GET":

        for g in alb:
            print("Album {} skill points.".format(g)) # testing db values, It works if I set manually values

        if alb:
            return render_template("artist.html", alb=alb)

拜托,我希望任何人都可以帮助我 最好的问候

【问题讨论】:

    标签: python html flask href


    【解决方案1】:

    在您的视图/模板中,您正尝试遍历 listalbumes,但我没有看到它被传递到任何地方。

    所以我认为你需要以某种方式传递专辑列表:

    @app.route('/artist/<string:autor>',  methods=['GET', 'POST'])
    def artista(autor):
        autor = request.form.get("autor")
    
        if request.method == "GET": # Handle GET request
            alb = db.session.query(Album._id, Album.name, Album.autor, Album.year,
                                   Album.media, Album.continent).filter(Album.autor=autor)
    
            if alb.exists(): # Handle if matching album list exists
                return render_template("artist.html", {"listalbumes": alb})
            else: # Handle if matching albumlist is not found
                return render_template("artist.html", {"listalbumes": []})
    
        else: # Handle POST request
            Album.create(autor)
            return Response("Created", status=201)
    

    【讨论】:

    • 感谢 Umair,但我的问题是 alb 变量为空,因为查询中的“Album.autor == autor”不采用页面 href 值。所以 alb 为假或不存在
    • 你能在过滤器中使用它之前检查autor的值吗?并再次确认 filter 中应该有单 = 或双 ==,我猜应该有单 =。
    • 您好 Umair,当我尝试检索该值时,我得到了以下信息:“视图函数没有返回有效响应。该函数要么返回 None,要么在没有返回语句的情况下结束。”
    • 您没有处理 POST 请求以及空白专辑列表(也许传递一个空列表?)。你也应该处理这些。
    【解决方案2】:

    我使用按钮发送值,带有带参数的 url:

    <table border="4">
    <tr>
        <td>ID</td>
        <td>Name</td>
        <td>Autor</td>
        <td>Year</td>
        <td>Genre</td>
        <td>Excluir</td>
        <td>Actualizar</td>
    </tr>
    {% for album in listalbumes %}
    <tr>
        <td>{{ album._id }}</td>
        <td>{{ album.name }}</td>
        <!-- <td><a href="/artist/{{ album.autor }}"id="autor" >{{ album.autor }}</a></td> -->  <!-- esta vaina no funciona.... no se por que -->
        <!-- para que funcione enviamos los datos -->
        <td><input type="submit" value="{{ album.autor }}" name="autor" onclick="window.location.href='/artist/artist?autor={{ album.autor }}'" /></td>
        <td>{{ album.year }}</td>
        <td>{{ album.name_genre }}</td>
        <td><a href="/excluir/{{ album._id }}">X</a></td>
        <td><a href="/actualizar/{{ album._id }}">Actualizar</a></td>
    </tr>
    {% endfor %}
    

    在我的代码中,我使用“request.args.get”获取值

    @app.route('/artist/<string:autor>',  methods=['GET', 'POST'])
    def artista(autor):
    if request.method == "GET":
        print('Im in GET')
        # autor = request.form.get("autor")
        autor = request.args.get('autor')
        print ("Autor=> ", autor)
    

    感谢您的帮助! alb = db.session.query(Album._id, Album.name, Album.autor, Album.year, Album.media, Album.continent).filter(Album.autor == autor).all() 对于 alb 中的 g: print("专辑 {} 技能点。".format(g)) # 测试 db 值

        return render_template("artist.html", autor=autor, alb=alb)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2021-11-15
      • 2014-11-17
      • 2021-02-11
      • 2021-11-21
      • 1970-01-01
      相关资源
      最近更新 更多