Как динамически генерировать URL с flask и моей базой данных? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь динамически генерировать свой url_for, как это, и он не работает ...:

search. html

<a href="{{ url_for('{{ country }}') }}"

Здесь я запрашиваю свои данные для моего ссылка из моей базы данных.

rout.py

from app import app, db
from app.models import 


@app.route('/search')
def search():
    country = Country.query.get(3)
    return render_template('search.html', country=country.country)

#this is one of the final page where the link in the search results lead
#I will have /portugal, /france, etc...
    @app.route('/germany')
    def germany():
        return render_template('germany.html')

, и это фрагмент информации в моей базе данных:

models.py

from app import db

class Country(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    country = db.Column(db.String(120), index=True, unique=True)
    html_page = db.Column(db.String(255), index=True, unique=True)

    def __repr__(self):
        return '<Country {}>'.format(self.country)

Нужно ли мне даже сохранять URL-адрес, поскольку он совпадает с названием страны aka @ germany

1 Ответ

0 голосов
/ 05 февраля 2020

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

# renders the given country page from the base template
# EX: if given "Germany" the resulting url will be:
# mywebsite.com/country/Germany
@app.route("country/<str:country>", methods=["GET"])
def render_country(country):
    # your specific code here
    return render_template("countrybase.html", country=country)

В то время как ваша ссылка html будет выглядеть примерно так:

<a href="{{ url_for('routes.render_country, country="Germany"') }}">Link to Germany page</a>

Если у вас ее еще нет базовая html настройка шаблона Я бы порекомендовал изучить шаблоны Jinja и то, как Flask использует их . В примере проекта из официальной документации есть отличное руководство по началу работы.

Но в качестве быстрого примера можно привести базу вашей страны. html может выглядеть так:

{% extends base.html %}

{% block header %}
    <h1>{% block title %}{{ country["name"] }}{% endblock %}</h1>
{% endblock %}
{% block content %}
   <div class="my-custom-css-class">
   {{ country["other_country_data"] }}
   <!-- etc.. -->
   </div>
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...