2016-06-03 40 views
5

EDIT: Sorun çözüldü! Girişiniz için kullanıcı limbolarına teşekkür ederiz. Bu çözüm değildi, ama beni doğru yola yönlendirdi: LEFT JOIN tüm boş gönderileri gösteriyordu! Ayrıca, iyi tanımlanmış bir kontrol olarak iyi tanımlanmış bir kontrol de ekledim.Python - Sadece kullanıcı ipucunun sahibi ise sil tuşu göster

Hedef: Bir ileti sonrası gösterge panosunda, yalnızca oturum açmış olan kullanıcının bu gönderiye sahip olması durumunda silme-sonrası düğmesini göster.

Ne işe yarıyor: Kullanıcı veritabanına bir gönderi oluşturduysa, düğme & işlevini doğru gösterecektir.

Ne başarısız: Kullanıcının veritabanında bir gönderi yok ise, gösterge tablosunda değer içermeyen ve veritabanında olmayan bir 'şablon' iletisi görüntülenir. Tüm kullanıcıların gösterge panolarında, gönderilmeyen kullanıcıyla ilişkili bu 'şablon' yayını görünür. Kullanıcı bir veri tabanını veritabanına oluşturduktan sonra, bu 'şablon' ortadan kalkacak ve silme düğmesi doğru şekilde gösterecektir. Kullanıcının son (veya sadece) gönderisini sildiysem, bu 'şablon' yazısı yeniden görünecektir.

Ne düşünüyorum: 'if' ifademde bir sorun var mı? Kimlerle giriş yaptığımı dikkate almadan, herhangi bir gerçek gönderi olmayan her bir kullanıcı için bu 'şablon' yazısını görüntülediğinden.

dashboard.html kodum kısaltılmış. sorgusu ile Benim server.py

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

, kısaltılmış - Bunlar birbirine sadece durumda.

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

Teşekkür ederiz!

+0

Bu django değil mi? Django kullanıyorsanız neden mysql kütüphanelerini kullanıyorsunuz? – e4c5

+0

Flask/MySQL/Python kullanan bir öğreticiyi takip ediyorum ve henüz django'ya tanıtılmadım. –

+0

, iyi bir öğretici gibi görünmüyor – e4c5

cevap

0

Yapmanız gereken şey, mesajların görüntülenmeden önce gerçek olup olmadığını kontrol etmektir.

Jinja2'yi kullandığınızı varsayarak, {% for message in messages: %} numarasından önce, ileti koleksiyonunun boş olmadığını kontrol etmek için bu {% if messages is defined %} kodunu eklemeniz gerekir.

Tabii ki sonunda {% endif %}'u kapatmayı unutmayın.

İlgili konular