#python #flask
#python #flask
Вопрос:
Я столкнулся с проблемой с url_for, я создаю индексную страницу с помощью html-кода, который я помещаю в переменную в views.py эта переменная передается в качестве параметра в функции render_template, на индексной странице с помощью {{ content }}
я могу получить html-код из функции и хорошо отобразить почти все данные, когда страница была загружена в href, я не вижу правильного маршрута, но я вижу <a href="url_for('detail')">
вместо <a href="detail">
.
Это views.py
for dog in dogs:
url_detail = url_for('detail')
htmlDog = htmlDog '<div class="col-lg-4 col-md-6 col-sm-12 mt-3">
<div class="animal_block mx-2"><img alt="animal image" src="'
str(dog[6]) '" class="img-fluid img-thumbnail" />
<div class="text-center">' str(dog[0]) '</div><div>Lorem ipsum dolor sit
amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua...</div><div class="text-center">
<a href=' url_detail '>look detail</a></div><span
class="animal_id">1</span></div></div>'
def home():
return render_template(
"index.html",
content = htmlDogs,
)
I have to call some function to encode htmlDog or use something different of render_template?
Спасибо
Ответ №1:
Flask url_for
полагается на контекст запроса, вы не можете поместить его за пределы функции просмотра, попробуйте переместить цикл for в home
функцию.
Кроме того, вместо объединения HTML-кода в Python вам следует написать цикл for непосредственно в шаблоне ( index.html
) с синтаксисом Jinja. Например:
<body>
{% for dog in dogs %}
Put your html code here.
You can generate URL like this: <a href="{{ url_for('detail') }}">
{% endfor %}
</body>
кроме того, не забудьте передать dogs
переменную с помощью render_template:
@app.route('/')
def home():
return render_template("index.html", dogs=dogs)
Прочитайте документацию Jinja для получения более подробной информации.
Комментарии:
1. Спасибо, все работает нормально. Я сходил с ума по url_for.