2016-09-27 5 views
0

Я учу флягу, и у меня есть небольшая проблема. Я создал шаблон индекса, где находятся заголовки блога.Создание блога с флягой

{% for title in titles %} 

<!-- Main Content --> 
<div class="container"> 
    <div class="row"> 
     <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 
      <div class="post-preview"> 
       <a href="{{ url_for('post')}}"> 
        <h2 class="post-title"> 
         {{ title[0] }} 
        </h2> 
       </a> 

       <p class="post-meta">Posted by <a href="#">{{ author }}</a></p> 
      </div> 
      </div> 
     </div> 
     </div> 

    {% endfor %} 

Это часть моего шаблона post.html.

<div class="container"> 
     <div class="row"> 
      <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 

       <p>{{ post_text1 | safe }}</p> 
       <hr> 
       <div class="alert alert-info" role="alert">Posted by 
       <a href="#" class="alert-link">{{ author }}</a> 
       </div> 
      </div> 
     </div> 
    </div> 

Я использую sqlite3. В настоящее время каждый заголовок приводит к тому же post.html, где находится первый текст из первого сообщения. Как сделать каждый заголовок прямым текстом? Я имею в виду, если я нажму на первый заголовок, он должен открыть post.html и должен быть первый текст. Второй заголовок должен содержать второй текст. Должен ли я писать программу, которая создает новый html для каждого сообщения или есть ли другой способ?

@app.route('/') 
def index(): 
db = connect_db() 
titles = db.execute('select title from entries') 
titles = titles.fetchall() 
author = db.execute('select author from entries order by id desc') 
author = author.fetchone() 
return render_template('index.html', titles=titles[:], author=author[0]) 

@app.route('/post/') 
def post(): 
db = connect_db() 
post_text1 = db.execute('select post_text from entries') 
post_text1 = post_text1.fetchone() 
author = db.execute('select author from entries where id=2') 
author = author.fetchone() 
return render_template('post.html', post_text1=post_text1[0], author=author[0]) 
+0

Не могли бы вы опубликовать свой индекс и должность? –

ответ

3

Проблема возникает здесь <a href="{{ url_for('post')}}">.

Что это значит, Flask - создать URL-адрес для сообщения, который вы определили в виде как def post(argument), но вы не предоставляете аргумент. Итак, если вы, например, делаете, что принимаете свои сообщения на основе id, ваше мнение будет запрашивать /<int:post_id>/ в url, а post_id будет передано в качестве аргумента, на основе которого вы найдете конкретную запись и передаете это шаблону.

Ваш url_for должен отражать это, вы должны иметь {{ url_for('post', post_id=title[1]) }} или везде, где вы храните свой эквивалент post_id (может быть, это название для вас).

Edit:

Baed на правки, ваша проблема в том, что вы не говорите Настой должность которого принести. Вам нужно либо ID, либо slug, либо что-то, что пойдет в URL-адрес, и сообщит вам, какое сообщение вы ищете. Ваша функция прямо сейчас статична и всегда извлекает первую запись в вашей базе данных. Изменения, необходимые являются:

@app.route('/') 
def index(): 
db = connect_db() 
    titles = db.execute('select title, id from entries') 
    titles = titles.fetchall() 
    author = db.execute('select author from entries order by id desc') 
    author = author.fetchone() 
return render_template('index.html', titles=titles, author=author[0]) 

@app.route('/post/<int:post_id>/') 
def post(post_id): 
    db = connect_db() 
    post_text = db.execute('select post_text from entries where id = ?', post_id) 
    post_text = post_text1.fetchone() 
    author = db.execute('select author from entries where id=2') 
    author = author.fetchone() 
    return render_template('post.html', post_text1=post_text, author=author) 


<a href="{{ url_for('post', post_id=title[1])}}"> 

Кроме того, ваш автор выборка странно, вы должны их сохранить (по крайней мере, их идентификаторы) рядом с записями. Тогда я бы рекомендовал некоторые изменения именования и т. Д. Трудно просто ответить на вопрос и не писать код для вас, так как это сайт для ответа на конкретные вопросы, а не написание кода по запросу :) Попытайтесь понять, что я написал здесь, поиграть с ним немного больше и т. д., чтобы полностью удержать.

tl; dr: Должности должны получить аргумент, а затем получить сообщение, идентифицированное этим аргументом, программа не может магически определить, на какую запись вы нажали.

+0

Я думаю, что у меня есть проблема и в моем файле python. Я разместил свои функции выше. – Yakuzhy

+0

Ответ отредактирован, надеюсь, что это поможет! – iScrE4m

+0

Большое вам спасибо. Я все понял! – Yakuzhy

Смежные вопросы