【问题标题】:How to assign comment to the post commented on如何将评论分配给评论的帖子
【发布时间】:2020-07-07 22:27:54
【问题描述】:

我是 Django 初学者。我正在尝试实现有关如何在主页中实现评论表单并显示其 cmets 的代码。

class Image(models.Model):
    imageuploader_profile=models.ForeignKey(settings.AUTH_USER_MODEL) 
    upload_image=models.ImageField() 

class Comments(models.Model):
    user=models.ForeignKey(settings.AUTH_USER_MODEL)
    commented_image=models.ForeignKey(Image,....)
    comment_post=models.TextField()

def home(request):
    if request.method == 'POST':
        form=CommentForm(request. POST)
        if form.is_valid():
            comment=form.save(commit=False)
            comment.user=request.user
            comment.commented_image=post
            comment.save()
            return redirect.... 
    else:
        form=CommentForm

首页模板

{% for comment  in all_images %}
{{ comment.comment_post }}
{% endfor %}

【问题讨论】:

  • 我是否正确,您希望能够在模板中制作 html 表单以便用户可以传递评论?或者您希望所有人都可以看到已发表的评论?
  • @Hisham... 我如何查询每个帖子的评论,我的评论表单有效并且所有 cmets 都保存在数据库中。但是如何在主页模板中显示此评论?
  • @Hisham... 当我使用这个时:img=Image objects.filter(imageuploader_profile=request.user) cmets=Comments object.filter(commemted_image__in=img)。这会显示模板上的所有评论,但不会在评论的帖子中分配每个评论。如何让所有评论显示在我评论的每个帖子上?
  • 你有这个代码在 github 上还是在任何可以更容易解决这个问题的地方。
  • @Hisham...不,我没有。我可以在此处附上我的视图和模板的图像。你会这样吗?

标签: python django


【解决方案1】:

在您的第二张图片中更改了上下文,看看这是否解决了问题。

context = {'all_images': all_images, 'comments': comments}

已编辑:

编辑home.html

{% for image in all_images %}
 <img src="{{ image.upload_image"}} />

 {% for comment in comments %}
   {% if comment.commented_image == image %}  
     {{ comment.comment_post }}
   {% else %}
     No comments available.
   {% endif %}
  {% endfor %}
{% endfor %}

编辑 (2): 对于没有活动的 cmets 的计数:

编辑views.py

# change
all_images = Image.objects.filter(imageuploader_profile=request.user)
...

for image in all_images:
    images_comment_count = []
    images_comment_count.append(Comments.objects.filter(commented_image_id=image.id, active=True).count())
...

context = {..., 'images_comment_count': images_comment_count}

现在,编辑home.html

{% load index %}
...
{% for image in all_images %}
 <img src="{{ image.upload_image"}} />

 {% for comment in comments %}
   {% if comment.commented_image == image %}  
     {{ comment.comment_post }}
   {% else %}
     No comments available.
   {% endif %}
  {% endfor %}

  <!-- Comment Count CHANGED THIS -->
  {{ images_comment_count|index:forloop.counter0 }}
{% endfor %}

编辑 3:

是的,它显示了它,因为我们现在将创建自定义标签过滤器。 1)在同一个apps文件夹中创建templatetags/目录 2) 创建一个名为__init__.py 的文件 3)创建另一个名为index.py的文件,我们将填充这个文件 4)在index.py中添加给定的代码

from django import template
register = template.Library()

@register.filter
def index(indexable, i):
    return indexable[i]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2021-03-29
  • 2013-04-01
  • 2023-04-10
相关资源
最近更新 更多