#python #flask #jinja2
#python #flask #jinja2
Вопрос:
Я отображаю кучу сообщений на странице, где пользователь может просматривать списки, нажимать на один из них и отправляться на «страницу знакомств» для получения дополнительной информации о любом продукте, на который они нажали. Этот метод работает для каждой ссылки, КРОМЕ первой.
Каждый раз, когда я нажимаю на самую первую ссылку страницы, я получаю сообщение Не найдено: запрошенный URL-адрес не найден на сервере. Если вы ввели URL вручную, пожалуйста, проверьте правильность написания и повторите попытку.ошибка.
Логика, которую я использую для HMTL / jinja, такова (все закрыто должным образом, я сокращаю ненужный код для краткости):
{% set i = 0 %}
{% for row in data %}
{% set i = i 1 %}
<a href="/iLike/{{ i }}">
<li>content</li>
</a>
и мой код на python:
@app.route('/iLike/<int:num>', methods=['GET','POST'])
def single2(num):
try:
loc = session.get('loc')
transType = session.get('transType')
data = singlesQuery()
return render_template('single.html', loc=loc,transType=transType,data=data[num-1])
except Exception as e:
return (str(e))
Комментарии:
1.
loop.index
В jinja2 уже есть, вам это не нужноset i
.2. Что показывает URL-адрес при наведении курсора мыши на ссылку?
3. использование локального хоста, а затем URL-адрес показывает /iLike/1/ @Soviut
4. Похоже
/iLike/1/
, что в конце есть дополнительная косая черта. Это тот, который работает/iLike/2
?5. Вы делаете
data[num-1]
, почему бы просто не отправить0
сквозной URL-адрес?loop.index
сделал бы это.
Ответ №1:
Нет необходимости создавать URL-адреса вручную. Лучший способ использовать встроенную функцию flask url_for
:
{{url_for('single2', num=i)}}
Также нет необходимости вычислять i
вручную, потому что есть встроенный loop.index
и loop.index0
:
{% for row in data %}
<a href="{{url_for('single2', num=loop.index)}}">
Я считаю, что это всегда должно создавать действительный URL.
Комментарии:
1. Все еще получаю ошибку по самой первой ссылке. хм. @zvone Я перешел ко второму предложению..
2. @user3344239 Я предложил конечную косую черту в комментариях 😉 в любом случае, у вас все еще есть конечная косая черта с этим кодом здесь?
3. Я не предлагал завершающую косую черту. Это правильный ответ. Вы должны использовать
url_for()
, поскольку он будет правильно форматировать ваши URL-адреса без завершающей косой черты.4. Я хотел разрешить завершающую косую черту, поэтому я добавил ее в @app.route . Я также переформатировал код, используя ваши предложения. Спасибо вам обоим.