【问题标题】:How to use django-taggit similar_objects() with Class-based views如何将 django-taggitsimilar_objects() 与基于类的视图一起使用
【发布时间】:2019-02-11 02:05:12
【问题描述】:

我想在我的模板上显示 4 个与当前项目具有相同标签的相关项目。 我正在使用大包 django-taggit 并且我已经阅读了 django-taggit doc

他们没有解释如何使用“similar_objects()”来制作具有基于类的视图的相关项目

我的意见.py:

class GameDetail(DetailView):
    model = Game
    template_name = 'core/game_detail.html'
    context_object_name = 'game_detail'

我的模型.py:

class Game(models.Model):
    name = models.CharField(max_length=140)
    developer = models.CharField(max_length=140)
    game_trailer = models.CharField(max_length=300, default="No Trailer")
    game_story = models.TextField(default='No Story')
    tags = TaggableManager()

我的模板“game_detail.html”很长,如果您能解释一下如何在我的视图中使用django-taggit以及如何在模板上显示相关项目,我将不胜感激

【问题讨论】:

    标签: django django-taggit


    【解决方案1】:

    你可以这样构建你的视图:

    class GameDetail(DetailView):
        model = Game
        template_name = 'core/game_detail.html'
        context_object_name = 'game_detail'
    
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            context["related_items"] = self.object.tags.similar_objects()[:4]
            return context
    

    然后您可以像往常一样在模板上使用related_items 列表。

    注意:如果您使用的是python2super 调用应该是这个:

    context = super(self, GameDetail).get_context_data(**kwargs)
    

    【讨论】:

    • 感谢您的重播,它给了我这个错误'Game' object has no attribute 'similar_objects'
    • 我发现问题应该是 self.object.tags.similar_objects()[:4] 而不是 self.object.similar_objects()[:4] 请更新您的答案,以便我接受它
    • 是的,抱歉,忘记添加字段,已修复。
    猜你喜欢
    • 2014-07-23
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2013-05-01
    • 1970-01-01
    • 2015-02-25
    • 2013-09-29
    相关资源
    最近更新 更多