Django Error ''WSGIRequest' object has no attribute 'Players''

Viewed 139

I am trying to create a detailed page for each player from the Players model, but for some reason, I am getting this error. How can I fix this?

My models.py:

class Players(models.Model):
    name = models.CharField(max_length=255)
    position = models.CharField(max_length=255)
    image_url = models.CharField(max_length=2083)

My views.py:

def PlayerDetailView(request, player):
    model = Players
    player = request.Players
    context = {'player' : player}
    return render(request, 'player_detail.html',  context)

My player_detail.html:

{% extends 'base.html' %}

    {% block content %}
        <h1>{{ player.name }}</h1>
        <img class="card-img-top" width="20" height="300" src="{{ player.image_url }}">
    {% endblock %}

My urls.py:

path('players/<str:player>', views.PlayerDetailView, name='player-detail'),
2 Answers

Give this a try

def PlayerDetailView(request, player):
    model = Players
    player = Players.objects.get(name=player)
    context = {'player' : player}
    return render(request, 'player_detail.html',  context)

You can retrieve the Player object with as name the <str:player> URL parameter with:

from django.shortcuts import get_object_or_404

def PlayerDetailView(request, player):
    player = get_object_or_404(Players, name=player)
    context = {'player' : player}
    return render(request, 'player_detail.html',  context)

Typically however a slug is used, not the name of the Player, since that can result in "ugly" URLs if we work with spaces, accents, etc. For more information, see the documentation on a SlugField.

Related