I am working on a social media website for a capstone project, and am needing to get my user messages displayed. I see the messages created and added to my messages table in my db, but I cant seem to get the HTML to display them.
Ive been at this for about 6 hours. I have tried changing my naming conventions, checking my variables, forms, models, and server routes .
HTML:
{% block body %}
<h1>My Messages:</h1>
<ul>
{% for message in messages %}
<li>
<a href="/messages/{{ message.message }}">{{ message.sender }} {{ message.message }}</a>
</li>
{% endfor %}
</ul>
{% endblock %}
ROUTE:
@app.route('/messages', methods=['GET', 'POST'])
@login_required
def messages():
message_form = MessageForm()
message_form.recipient.choices = [(user.id, user.username) for user in User.query.all()]
if message_form.validate_on_submit():
sender_id = current_user.id
recipient_id = int(message_form.recipient.data)
message = message_form.message.data
new_message = Message(sender_id=sender_id, recipient_id=recipient_id, message=message)
db.session.add(new_message)
db.session.commit()
flash('Message sent!')
return render_template('messages.html', message_form=message_form, message=message)
MODEL:
class Message(db.Model):
__tablename__ = "messages"
message_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
sender_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
recipient_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
date_time = db.Column(db.DateTime, default=datetime.utcnow)
message = db.Column(db.String, nullable=False)
sender = db.relationship('User', foreign_keys=[sender_id])
recipient = db.relationship('User', foreign_keys=[recipient_id])
def get_time(self):
return self.timestamp.strftime("%b %d, %Y %H:%M:%S")
def __repr__(self):
return f"<Message={self.message}>"
FORM:
class MessageForm(FlaskForm):
sender_id = HiddenField('Sender')
recipient = SelectField('Recipient', validators=[DataRequired()])
message = TextAreaField('Message', validators=[DataRequired()])
submit = SubmitField('Submit')