django - Django:包含的模板不出现
问题描述
我正在用 ajax 实现消息系统。当我发布新消息时一切正常。我的意思是,新消息出现而不重新加载,但是当我转到“create_message”页面时,我看不到包含的模板(messages.html),它在发布消息后包含。我尝试包含其他模板并且它有效。我的代码如下,提前感谢您的帮助。
视图.py
class MessageCreateView(CreateView):
model = Message
fields = ['content']
template_name = 'users/create_message.html'
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
if request.method == 'POST':
sender = self.request.user.profile
receiver_pk = self.kwargs['profile_pk']
print(receiver_pk)
receiver = Profile.objects.get(id=receiver_pk)
new_message = Message.objects.create(
message_by=sender,
message_to=receiver,
content = form.cleaned_data['content'])
return JsonResponse({'message': model_to_dict(new_message)}, status=200)
else:
return self.form_invalid(form)
def get_context_data(self, **kwargs):
context = super(MessageCreateView, self).get_context_data(**kwargs)
context['profile_pk'] = self.kwargs['profile_pk']
return context
def messages(request, profile_pk):
current_user_profile = request.user.profile
second_profile = Profile.objects.get(pk=profile_pk)
messages = Message.objects.filter(
Q(message_to=current_user_profile, message_by=second_profile)|
Q(message_to=second_profile, message_by=current_user_profile)).order_by('date_of_create')
context = {
'messages': messages
}
return render(request, 'users/messages.html', context=context)
网址.py
urlpatterns = [
path('login/', CustomLoginView.as_view(template_name='users/login.html'), name='login'),
path('logout/', LogoutView.as_view(template_name='users/logout.html'), name='logout'),
path('register/', register, name='register'),
path('profile/<int:pk>/', ProfileDetailView.as_view(), name='profile_detail'),
path('profile/follow/<int:pk>', follow_profile, name='follow_profile'),
path('results/', search, name='search'),
path('create_message/<int:profile_pk>/', MessageCreateView.as_view(), name='create_message'),
path('messages/<int:profile_pk>/', messages, name='messages')
]
create_message.html
{% extends 'users/base.html' %}
{% load crispy_forms_tags %}
{% block title %}Chat{% endblock %}
{% block content %}
<div class="messages">
{% include 'users/messages.html' %}
</div>
<form action="" method="POST" class="messageForm" data-url="{% url 'create_message' profile_pk %}">
{% csrf_token %}
{{ form|crispy }}
<button type="button" class="messageBtn">Send</button>
</form>
{% endblock %}
消息.html
{% for message in messages %}
<h6>{{ message.content }}</h6>
<small>{{ message.message_by }} / {{ message.date_of_create }}</small>
{% endfor %}
解决方案
我认为这是因为字典中没有messages
用于context
呈现crete_messages
页面。我只是从您的messages
视图中复制和粘贴代码,在下面草率地做到了这一点,但您可能想要重构它。
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
if request.method == 'POST':
sender = self.request.user.profile
receiver_pk = self.kwargs['profile_pk']
print(receiver_pk)
receiver = Profile.objects.get(id=receiver_pk)
new_message = Message.objects.create(
message_by=sender,
message_to=receiver,
content = form.cleaned_data['content'])
return JsonResponse({'message': model_to_dict(new_message)}, status=200)
else:
return self.form_invalid(form)
def get_context_data(self, **kwargs):
context = super(MessageCreateView, self).get_context_data(**kwargs)
profile_pk = context['profile_pk'] = self.kwargs['profile_pk']
current_user_profile = self.request.user.profile
second_profile = Profile.objects.get(pk=profile_pk)
messages = Message.objects.filter(
Q(message_to=current_user_profile, message_by=second_profile)|
Q(message_to=second_profile, message_by=current_user_profile)).order_by('date_of_create')
context['messages'] = messages
return context
推荐阅读
- python - 二进制交叉熵输出,如何读取输出?
- java - 如何降低精灵动画的帧速?
- android - 更改 Java Android Widget 中 ImageView 的 xml 值 android:layout_marginStart
- python - 尝试打开网络摄像头时打开 CV 错误
- loops - 我正在尝试将 1 添加到每个单元格 d1-d15 并在单元格 e1-e15 中输出
- angular - 找不到包 ionic-native/splash-screen 和 ionic-native/status-bar
- android-jetpack-compose - 隐藏/显示 CircularProgressIndicator onclick Jetpack Compose
- javascript - 类型的参数不可分配给“SetStateAction”类型的参数
'。在反应 - qt - 如果窗口放大率发生变化,QLabel 将被截断
- python - 尝试在 Qt6 中等待线程时显示关闭倒计时