如何在基于类的视图中使用 django-taggit similar_objects()

DAM*_*225 0 django django-taggit

我想在我的模板上显示 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'
Run Code Online (Sandbox Code Playgroud)

我的models.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()
Run Code Online (Sandbox Code Playgroud)

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

det*_*hos 5

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

context = super(self, GameDetail).get_context_data(**kwargs)
Run Code Online (Sandbox Code Playgroud)