我正在为一个顶点项目开发社交媒体网站,需要显示我的用户消息。我在我的数据库中看到创建并添加到我的消息表中的消息,但我似乎无法获得 HTML 来显示它们。
我在这里待了大约 6 个小时。我尝试过更改我的命名约定,检查我的变量、表单、模型和服务器路由。
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 %}
路线:
@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)
型号:
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}>"
表格:
class MessageForm(FlaskForm):
sender_id = HiddenField('Sender')
recipient = SelectField('Recipient', validators=[DataRequired()])
message = TextAreaField('Message', validators=[DataRequired()])
submit = SubmitField('Submit')
我修好了。我正在调用消息的端点而不是我的 HTML 中的函数。更新后的 HTML 在 url_for 方法中的“消息”之前没有正斜杠:
{% block body %}
<h1>My Messages:</h1>
<ul>
{% for message in messages %}
<li>
<div method="GET", action="{{ url_for ('messages') }}">
<p>From: {{ message.sender.username }}</p>
<p>Message: {{ message.message }}</p>
<p>Date/Time: {{ message.date_time }}</p>
</div>
</li>
{% endfor %}
</ul>
{% endblock %}