我想在导航栏中的特定平台上显示每个游戏标题(没有人回答,我已将完整错误显示为答案)

2024-04-25 14:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过创建一个名为“show_pc_game”的游戏管理器,在导航栏的特定平台上显示每个游戏标题,该功能只显示平台为pc的游戏

This is my models.py:

class GameManager(models.Manager):
def show_pc_game(self):
    return self.filter(platform='PC')

class Platform(models.Model):
    PLATFORM_CHOICES = (
        ('PC', 'PC'),
        ('PS', 'playstation'),
        ('XBOX', 'Xbox'),
        ('Nintendo Switch', 'nintendo switch'),
    )
    title = models.CharField(max_length=15, choices=PLATFORM_CHOICES, verbose_name= 
    "platform")
    slug = models.SlugField(max_length=100, unique=True)

    class Meta:
        verbose_name = "platform"
        verbose_name_plural = "platforms"

    def __str__(self):
        return self.title

class Game(models.Model):
    title = models.CharField(max_length=50)
    description = models.TextField()
    slug = models.SlugField(max_length=100, unique=True)
    image = models.ImageField(upload_to="images")
    platform = models.ManyToManyField(Platform)

    class Meta:
        verbose_name = "game"
        verbose_name_plural = "games"

    def __str__(self):
        return self.title

    objects = GameManager()

my views.py:

def home(request):
    return render(request, 'blog/base.html')

class GameList(ListView):
    template_name = "blog/game.html"
    model = Game

class GameDetail(DetailView):
    template_name = "blog/game_detail.html"

class PlatformList(ListView):
    template_name = "blog/platform.html"
    model = Platform

我在辅助html文件中使用了“extends”,因此我只能在“base.html”中应用更改

And this is my context_processors.py for apply contextes:

from .models import Platform, Game

def add_variable_to_context(request):
    return {
        'platforms': Platform.objects.all(),
        'games': Game.objects.all(),
        'PC_games': Game.objects.show_pc_game(),
    }

And my base.html:

    <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown">Platform</a>
        <ul class="dropdown-menu">
            {% for platform in platforms %}
            <li><a class="dropdown-item" href="#"> {{platform.title}} &raquo; </a>
                {% for pcgame in PC_games %}
                <ul class="submenu dropdown-menu">
                    <li><a class="dropdown-item" href="#">{{game.title}}</a></li>
                </ul>
                {% endfor %}
            </li>
            {% endfor %}
        </ul>
    </li>

当我重新加载浏览器时,我收到一个错误:“Manager”对象没有“show\u pc\u game”属性

有什么建议可以解决这个问题吗