2016-06-03 1 views
5

EDIT: Проблема решена! Спасибо пользователю limbo за ваш вклад. Это было не решение, но привело меня по правому пути: мой LEFT JOIN показывал все пустые сообщения! Я также включил проверку if-check в качестве хорошей резервной проверки.Python - Показать кнопку удаления, только если пользователь владеет сообщением

Goal: На панели сообщений сообщения на панели сообщений отображается только кнопка удаления сообщения, если зарегистрированный пользователь владеет этим сообщением.

Что работает: Кнопка будет отображать & правильно, если пользователь создал сообщение в базе данных.

Что не удается: Если пользователь не имеет записи в базе данных, на панели мониторинга отображается сообщение «шаблон», которое не имеет значения и не находится в базе данных. На всех панелях пользователей это сообщение «шаблон», связанное с пользователем, не являющимся проводником, видимо. Как только пользователь создает сообщение в базе данных, этот «шаблон» исчезнет, ​​и кнопка «Удалить» будет отображаться правильно. Если я удалю последнее (или только) сообщение пользователя, это сообщение «шаблон» снова появится.

Что я думаю: Что-то не так с моим утверждением «если»? Поскольку он отображает эту запись «шаблона» для каждого пользователя, у которого нет реальных сообщений, независимо от того, во что я вошел в систему.

Вот мой код для dashboard.html, сокращенно.

{% for message in messages: %} 
     //'mu_id' is messages.user_id as defined in server.py 
     //'user[0]['id'] is logged-in user id 
     //using 'session['id'] instead produces same (unwanted) results 

     {% if message['mu_id'] == user[0]['id']: %} 
      // show delete button (this part worked, don't worry) 
     {% endif %} 

     //this displays each message with poster name 
     {{message['first_name']}}<br> 
     {{message['message']}} 

    {% endfor %} 

Мои server.py с запросом сокращенно - только в случае, если это связано.

//this query uses session['id'] to grab user data 
query = "SELECT * FROM users WHERE id = :id LIMIT 1" 
data = { 
    'id': session['id'] 
} 
user = mysql.query_db(query, data) 

// this query joins messages & users tables 
mquery = "SELECT first_name, message, messages.id AS message_id, messages.user_id AS mu_id FROM users LEFT JOIN messages ON users.id = messages.user_id" 
messages = mysql.query_db(mquery) 

//Long query here to get comments, by joining messages & users table to comments table. 

return render_template('dashboard.html', user=user, messages=messages, comments=comments) 

Спасибо!

+0

Разве это не джанго? Почему вы используете библиотеки mysql, если используете django? – e4c5

+0

Я следую учебному курсу, который использует Flask/MySQL/Python, и пока не был введен в django. –

+0

это не похоже на хороший учебник вообще – e4c5

ответ

0

Я думаю, что вам нужно проверить, действительно ли сообщения реальны, прежде чем отображать их.

Предполагая, что вы используете jinja2, вам необходимо вставить этот {% if messages is defined %} до {% for message in messages: %}, чтобы проверить, что коллекция сообщений не пуста.

Конечно, не забудьте закрыть, если {% endif %} в конце.

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