Flask направляет несколько слоев маршрутов - PullRequest
0 голосов
/ 20 марта 2020

Мне нужно решение, чтобы направить в более глубокий слой URL (если это утверждение верно). После входа в систему пользователь может видеть две кнопки, и текущий URL-адрес

/tools

После нажатия одной кнопки он направляется на новую страницу, URL-адрес которой теперь

/tools/swi

, где swi - название кнопки. На этой странице есть еще две кнопки, одна из которых view . Я хочу щелкнуть по нему и показать URL

/tools/swi/table

, но я не знаю, как этого добиться. Потому что, если я нажимаю другую кнопку на странице инструментов и затем нажимаю view , я хочу получить URL

/tools/dsm/table

. Существующий код выглядит следующим образом: Кнопочный набор кнопок инструментов

toolsdict = {
    "swi":["swi"],
    "dsm":["dsm"]
}

Код маршрута:

@app.route('/tools',methods=['POST','GET'])
@login_required
def tools():
    return render_template('tools.html',title='Tools',Tools=toolsdict)

@app.route('/tools/<string:subt>',methods=['POST','GET'])
@login_required
def subtool(subt):
    htmlname = subt+".html"
    return render_template(htmlname,title=list(toolsdict.keys())[list(toolsdict.values()).index([subt])])

@app.route('/table', methods=['GET', 'POST'])
@login_required
def table_edit():
    extraction = PDF.query.all()
    labels = db.Model.metadata.tables['pdf_info'].c.keys()
    return render_template('table.html',
                           title='Table edit', labels=labels, extraction=extraction)

Я пытаюсь перейти на

@app.route('/tools/<string:subt>/table', methods=['GET', 'POST'])

Но я не знаю, как передать значение выбранной кнопки в subt переменная.

Код HTML:

инструменты. html

{% extends "select.html" %}
{% block selection %}
    {% for k in Tools.keys() %}
        <a href="{{ url_for('subtool',subt=Tools[k][0])  }}" class="btn btn-lg btn-primary btn-sm">{{ k }}</a>
    {% endfor %}
{% endblock %}

swi. html

{% extends "select.html" %}
{% block selection %}
    <a href="{{ url_for('table_edit') }}" class="btn btn-lg btn-primary btn-sm">View</a>
    <a href="{{ url_for('add_entry') }}" class="btn btn-lg btn-primary btn-sm">Create</a>
{% endblock %}

часть таблицы. html

<table class="table table-striped table-hover">
            <thead>
                <tr>
                    {% for label in labels %}
                        <td>{{ label }}</td>
                    {% endfor %}
                    <td></td>
                    <td></td>
                </tr>
            </thead>
            {% for ex in extraction %}
                <tr class={{ "success" if ex.done }}>
                    <td>{{ ex.id }}</td>
                    <td>{{ ex.author }}</td>
                    <td>{{ ex.title }}</td>
                    <td>{{ ex.version }}</td>
                    <td>{{ ex.last_update }}</td>
                    <td>{{ ex.filepath }}</td>
                    <td>{{ ex.uid }}</td>
                    <td><a href="edit/{{ ex.id }}" class="btn btn-secondary pull-left btn-sm">Edit</a></td>
                    <td>
                        <form action="{{ url_for('delete',id=ex.id) }}" method="post">
                            <input type="hidden" name="_method" value="DELETE">
                            <input type="submit" value="Delete" class="btn btn-danger btn-sm">
                        </form>
                    </td>
                <td><a href="{{ url_for('pdf_open',fn=ex.title) }}" class="btn btn-warning pull-left btn-sm">Open</a></td>
                </tr>
            {% endfor %}
        </table>

Может ли кто-нибудь помочь? Спасибо.

1 Ответ

0 голосов
/ 20 марта 2020

Попробуйте с этими модификациями

@app.route('/tools', methods=['POST','GET'])
def tools():
    headers = {'Content-Type': 'text/html'}
    return make_response(render_template('tools.html',title='Tools',Tools=toolsdict), 200, headers)    


@app.route('/tools/<string:subt>', methods=['POST','GET'])
def subtool(subt):
    headers = {'Content-Type': 'text/html'}
    return make_response(render_template('{}.html'.format(subt), title=list(toolsdict.keys())[list(toolsdict.values()).index([subt])])
, 200, headers)    


@app.route('/tools/<string:buttonName>/table', methods=['GET', 'POST'])
def table_edit(buttonName):
    return render_template('table.html', whoami=buttonName, title='Table edit')


@app.route('/tools/<string:buttonName>/addentry', methods=['GET', 'POST'])
def add_entry(buttonName):
    return render_template('table.html', whoami=buttonName, title='Add entry')  

base. html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Test App</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css" />
</head>

<body>
    <section class="hero is-primary is-fullheight">

        <div class="hero-head">
            <nav class="navbar">
                <div class="container">

                    <div id="navbarMenuHeroA" class="navbar-menu">
                        <div class="navbar-end">
                            <a href="{{ url_for('tools') }}" class="navbar-item">
                                Tools
                            </a>
                        </div>
                    </div>
                </div>
            </nav>
        </div>
        <div class="hero-body">
            <div class="container has-text-centered">
               {% block content %}
               {% endblock %}
            </div>
        </div>
    </section>
</body>

</html>

tools. html

{% extends "base.html" %}
{% block content %}
    {% for k in Tools.keys() %}
        <a href="{{ url_for('subtool', subt=Tools[k][0])  }}" class="btn btn-lg btn-primary btn-sm">{{ k }}</a>
    {% endfor %}
{% endblock %}

swi. html

{% extends "base.html" %}

{% block content %}
<div>
    <a href="{{ url_for('table_edit', buttonName='swi') }}" class="btn btn-lg btn-primary btn-sm">View</a>
    <a href="{{ url_for('add_entry', buttonName='swi') }}" class="btn btn-lg btn-primary btn-sm">Create</a>
</div>

{% endblock %}

dsm. html

{% extends "base.html" %}

{% block content %}
<div>
    <a href="{{ url_for('table_edit', buttonName='dsm') }}" class="btn btn-lg btn-primary btn-sm">View</a>
    <a href="{{ url_for('add_entry', buttonName='dsm') }}" class="btn btn-lg btn-primary btn-sm">Create</a>
</div>

{% endblock %}

таблица . html

{% extends "base.html" %}
{% block content %}

<table class="table table-striped table-hover">
    <thead>
        <tr>
           <td>Header for {{ whoami }}</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Inside Body</td>
        </tr>
    </tbody>
</table>
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...