Python 如何在评论表单上显示所选帖子
我正在做一个项目,用户可以发布视频并评论其他人的视频,比如instagram 评论页面有三个部分,一个是上传评论的表单,一个是显示评论的表单 最后是用户选择评论的视频(不显示) models.pyPython 如何在评论表单上显示所选帖子,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我正在做一个项目,用户可以发布视频并评论其他人的视频,比如instagram 评论页面有三个部分,一个是上传评论的表单,一个是显示评论的表单 最后是用户选择评论的视频(不显示) models.py class Comment(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE)
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.TextField(max_length=160)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '{}-{}'.format(self.post.title, str(self.user.username))
class Post(models.Model):
text = models.CharField(max_length=200)
video = models.FileField(upload_to='clips', null=True, blank=True)
user = models.ForeignKey(User, related_name='imageuser', on_delete=models.CASCADE, default='username')
liked = models.ManyToManyField(User, default=None, blank=True, related_name='liked')
updated = models.DateTimeField(auto_now=True)
created =models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.text)
def get_absolute_url(self):
return reverse('comments', args=[self.pk])
views.py
def comments(request, pk):
post = get_object_or_404(Post, pk=pk)
comments = Comment.objects.filter(post=post)
if request.method == 'POST':
comment_form = CommentForm(request.POST or None)
if comment_form.is_valid():
content = request.POST.get('content')
comment = Comment.objects.create(post=post, user=request.user, content=content)
comment.save()
return HttpResponseRedirect(post.get_absolute_url())
else:
comment_form = CommentForm()
context2 = {
"comments": comments,
"comment_form": comment_form,
}
return render(request, 'comments.html', context2)
comments.html
<div class="post-container">
<video class="video" width='400'>
<source src='{{ video.url }}' type='video/mp4'>
</video>
</div>
<div class="comment-container">
<form method="post">
{% csrf_token %}
{{comment_form.as_p}}
{% if request.user.is_authenticated %}
<input type="submit" value="Submit">
{% else %}
<input type="submit" value="Submit"disabled>
{% endif %}
</form>
<div class="main-comment-section">
{{ comments.count }}
{% for comment in comments %}
<blockquote class="blockquote">
<p class="mb-0">{{ comment.content }}</p>
<footer class="blockquote-footer">by <cite title="Source Title">{{ comment.user }}</cite></footer>
</blockquote>
{% endfor %}
</div>
</div>
{%csrf_令牌%}
{{comment_form.as_p}}
{%if request.user.u经过身份验证%}
{%else%}
{%endif%}
{{comments.count}
{注释%中的注释为%}
{{comment.content}
通过{comment.user}
{%endfor%}
有任何问题请告诉我;) 您可以将其添加到上下文词典
“post”:post
,并从上下文中删除“comments”:comments,
然后在模板中,您可以循环浏览注释,如
{% for comment in post.comment_set.all %}
<blockquote class="blockquote">
<p class="mb-0">{{ comment.content }}</p>
<footer class="blockquote-footer">by <cite title="Source Title">{{ comment.user }}</cite></footer>
</blockquote>
{% endfor %}
{%用于post.comment\u set.all%}
{{comment.content}
通过{comment.user}
{%endfor%}
那视频呢
<video class="video" width='400'>
<source src='{{ post.video.url }}' type='video/mp4'>
</video>
另外,当您使用
comment.objects.create()
方法时,无需调用comment.save()
。create()
确保您已维护媒体文件设置。在settings.py文件中:
MEDIA_ROOT= os.path.join(os.path.dirname(BASE_DIR), "media/")```
Then in your main urls.py:
```urlpatterns = patterns('',
# ... the rest of your URLconf goes here ... ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
还要确保在模板中添加enctype=“multipart/form data
in-form标记
有关更多信息,请参阅