присвоение url_for переменной и использование ее в качестве параметра в render_template не работает

#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.