#python #flask #redirect #flask-sqlalchemy
#python #flask #перенаправление #flask-sqlalchemy
Вопрос:
Привет, я в значительной степени новичок в Flask. Я создаю блог, в котором я собираю некоторые статьи с других сайтов, а также несколько статей из базы данных (MySQL). мой URL:
возвращается
ошибка 404 не найдена.
Я хочу перенаправить это на следующий URL:
https://bitcoinist.com/beware-bullish-bitcoin-case-could-be-due-to-cftc-scramble/
Я не могу жестко запрограммировать этот URL-адрес, поскольку он поступает из slug в базе данных и продолжает меняться. Как перенаправить его с помощью обработчика ошибок или любым другим способом?
Это приведенный ниже код, который извлекает содержимое блога из базы данных. URL, который я хочу перенаправить, хранится в базе данных как slug. Блог, который я загружаю в базу данных, работает нормально. Требуется настроить перенаправление только для внешних блогов или новостных статей.
Для внешнего URL-адреса, который хранится как slug, он возвращает 404: URL: http://127.0.0.1:5000/post/https://bitcoinist.com/beware-bullish-bitcoin-case-could-be-due-to-cftc-scramble/
и хотите перенаправить его на: https://bitcoinist.com/beware-bullish-bitcoin-case-could-be-due-to-cftc-scramble /
@app.route('/post/<string:post_slug>', methods=['GET'])
def post_route(post_slug):
post = Posts.query.filter_by(slug=post_slug).first()
return render_template('post.html', params=params, post=post)
извините, я новичок в SO и не могу выполнить свой запрос так, как он должен.
Комментарии:
1. Добро пожаловать в SO. Вам необходимо включить свой код в свой пост.
2. Вы можете зарегистрировать маршрут для
/post/<url>
, а затем использоватьurl
для поиска записи в базе данных перед перенаправлением на правильный URL?3. У @MatsLindh есть решение
Ответ №1:
Я придумал другое решение, и оно сработало (по крайней мере, на данный момент). url, который возвращал ошибку 404, я разделил его и взял URL, на который он должен был перенаправляться, используя обработчик ошибок. Ниже приведен код.
@app.errorhandler(404)
def go_to(url):
url = str(str(request.path).split('/post/')[1])
return redirect(url)
итак, приведенный выше код возвращает оставшийся URL-адрес после post/ . т.е.
(https://bitcoinist.com/beware-bullish-bitcoin-case-could-be-due-to-cftc-scramble /) (проверьте вопрос для справки)