2016-06-03 38 views
5

MODIFICA: Problema risolto! Grazie al limbo utente per il tuo contributo. Non era la soluzione, ma mi ha guidato lungo la strada giusta: il mio LEFT JOIN mostrava tutti i post nulli! Ho anche incluso il controllo if-defined, come un buon controllo di back-up.Python - Mostra pulsante Elimina solo se l'utente possiede post

Obiettivo: In un cruscotto di messaggi, viene visualizzato solo il pulsante Elimina post se l'utente che ha effettuato il login possiede quel post.

Cosa funziona: Il pulsante visualizza la funzione & correttamente se l'utente ha creato un post nel database.

Cosa non funziona: Se l'utente non ha un post nel database, nella dashboard viene visualizzato un messaggio di "modello" che non contiene alcun valore e non si trova nel database. Su tutti i cruscotti degli utenti, questo post 'modello' associato all'utente non postente è visibile. Una volta che l'utente crea un post nel database, questo 'modello' scomparirà e il pulsante di cancellazione verrà visualizzato correttamente. Se elimino l'ultimo post (o solo) dell'utente, questo post "modello" riappare.

Cosa penso: C'è qualcosa di sbagliato nella mia dichiarazione "se"? Poiché visualizza questo post "modello" per ogni singolo utente che non ha alcun vero post, indipendentemente da chi sono registrato come.

Ecco il mio codice per dashboard.html, abbreviato.

{% 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 %} 

mio server.py, con interrogazione abbreviato - nel caso in cui esso è legato.

//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) 

Grazie!

+0

Non è questo Django? Perché stai usando le librerie mysql se stai usando django? – e4c5

+0

Sto seguendo un tutorial che usa Flask/MySQL/Python e non ho ancora introdotto il django. –

+0

non sembra affatto un buon tutorial – e4c5

risposta

0

Penso che quello che devi fare è controllare se i messaggi sono reali prima di visualizzarli.

Supponendo che si stia utilizzando jinja2 è necessario inserire questo {% if messages is defined %} prima di {% for message in messages: %} per verificare che la raccolta di messaggi non sia vuota.

Naturalmente non dimenticare di chiudere il tuo se {% endif %} alla fine.