Колба url_for () с аргументами - PullRequest
       12

Колба url_for () с аргументами

0 голосов
/ 25 сентября 2018

Я изучаю Flask, и я застрял здесь.

Как создавать ссылки для результатов поиска с аргументами (параметром)?

Мое приложение ищет книгии отображает их на странице HTML, используя Flask и Jinja2 вместе только с HTML.

Так что мой HTML имеет только эту функцию:

 <ul>
   {% for x in lk1 %}
      <li><a href="{{ url_for('bookPage'}}">{{ x[2] }}   (by) {{ x[3] }}  (year) :  {{ x[4] }}</a></li>
   {% endfor %}
 </ul>

, где lk1 - списоккниги, собранные Flask из SQL и x, являются необработанной информацией из базы данных SQL

Теперь на странице bookpage.html пусто, мне нужно передать аргументы с URL, чтобы я мог отобразить их на страницеили извлеките остальную информацию об этой книге и отобразите ее на странице книги, если вы могли бы помочь мне понять, как сделать URL заголовка книги, который соответствует моему коду: {{ x[2] }} Я видел, что ppl делает что-то вроде <url_titl>но я не знаю, как это работает

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 октября 2018
@app.route('books', methods=['GET', 'POST')
def books():
    book_list = Book.query.all()
    return render_template('books.html', book_list=book_list)

Шаблон;

<ul>
{% for x in book_list %}
    <li><a href="{{ url_for('bookpage', title=x.title, book_id=x.id }}">{{ x.title }}   (by) {{ x.author }}  (year) :  {{ x.year }}</a></li>
{% endfor %}
</ul>

Чтобы получить URL с заголовком, ваша функция просмотра должна быть такой, как показано ниже.Книга id важна, поскольку книги могут иметь одинаковые названия, поэтому их нельзя использовать в качестве уникальных идентификаторов.

@app.route('bookpage/<int:book_id>/<string:title>', methods=['GET', 'POST')
def bookpage(title=None, book_id=None):

Я бы посоветовал вам использовать Flask-SQLAlchemy и иметь Bookкак объект, как показано ниже, и вы сможете получить доступ к атрибутам, как показано в шаблоне Jinja.

class Book(db.Model):
    id = db.Column(db.Integer, db.ForeignKey)
    title = db.Column(Text)
    author = db.Column(Text)

Если вы хотите получить доступ к страницам книги, у вас может быть модель «Один ко многим» для книг и страниц, то есть одна книга имеет много страниц, если вы загружаете контент.

0 голосов
/ 25 сентября 2018

Я думаю, вам нужно узнать информацию о создании переменной URL с помощью flask и jinja.

Пример переменной URL.

HTML

<ul>
    {% for x in lk1 %}
      <li><a href="{{ url_for('bookPage', title=x[2] }}">{{ x[2] }}   (by) {{ x[3] }}  (year) :  {{ x[4] }}</a></li>
    {% endfor %}
</ul>

Python

@app.route('/books/<title>' )
# the name of this function have to be used in 
# url_for ('nameOfFunction',  name_of_variable_part_of_url=some_internal_variable)
def bookPage(title):
     # code, that will creat yourlist
     # book.html - template for book
     # listofvariables - variables for book's page
     # 
     return render_template ("book.html", listofvariables=yourlist)

Ссылка на похожий вопрос: Ссылочная переменная шаблона в выражении Jinja

Обновление: использование многих переменных вURL вы должны изменить HTML и Python.

HTML:

<a href="{{ url_for('bookPage', title=x[2], heading=x[3]) }}">all your text </a>

Python:

@app.route('/books/<title>-<heading>' ) 
def bookPage(title, heading):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...