NoReverseMatch в посте, когда я добавляю ссылку href

Я создаю "игровой" веб-сайт, где даются подсказки, а люди делают предположения.

Я добавил home.html, new_game.html, game_detail.html, base.html, и теперь edit_game.html. Все работает правильно для создания новой игры, списка (в home.html) и отображения подробностей. Теперь я добавляю функцию для редактирования игры в edit_game.html.

Когда я добавляю html-ссылку `Edit Game в game_detail.html, я получаю ошибку (ниже), когда я нажимаю на любую из игр в списке, которая должна отображать страницу game_detail. Другими словами, он не отображает страницу game_detail.html. Вот ошибка:

NoReverseMatch at /post/2/
Reverse for 'edit_game' with arguments '('',)' not found. 1 pattern(s) tried: ['post/(?P<pk>[0-9]+)/edit/$']

Очевидно, что передается ID сообщения. Но он не перехватывает "/edit/". Вот код подробной страницы:

<!-- templates/game_detail.html -->
{% extends 'base.html' %}

{% block content %}
    <div class="post-entry">
        <h2>{{object.title}}</h2>
        <p>{{ object.body }}</p>
    </div>
<a href="{% url 'edit_game' post.pk %}">Edit Game</a>
{% endblock content %}

Вот код урлов:

from django.urls import path
from .views import (
    GameListView,
    GameDetailView,
    GameCreateView,
    GameUpdateView,
 )

urlpatterns = [
    path('post/<int:pk>/edit/', GameUpdateView.as_view(), name='edit_game'),
    path('post/<int:pk>/', GameDetailView.as_view(), name='game_detail'),
    path('post/new/', GameCreateView.as_view(), name='new_game'),
    path('', GameListView.as_view(), name='home'),
]

Код представления:

from django.views.generic import ListView, DetailView
from django.views.generic.edit import CreateView, UpdateView
from .models import Game

class GameListView(ListView):
    model = Game
    template_name = 'home.html'

class GameDetailView(DetailView):
    model = Game
    template_name = 'game_detail.html'

class GameCreateView(CreateView):
    model = Game
    template_name = 'new_game.html'
    fields = ['title', 'author', 'body']

class GameUpdateView(UpdateView):
    model = Game
    template_name = 'edit_game.html'
    fields = ['title', 'body']

Объект передается как object и game в шаблон, таким образом, вы можете построить ссылку с:

{% url 'edit_game' game.pk %}

или:

{% url 'edit_game' object.pk %}

Виллем,

Просто для развлечения, я попробовал следующее, что работает:

<!-- templates/game_detail.html -->
{% extends 'base.html' %}

{% block content %}
    <div class="post-entry">
        <h2>{{game.title}}</h2>
        <p>{{ object.body }}</p>
    </div>
<a href="{% url 'edit_game' game.pk %}">Edit Game</a>
{% endblock content %}

Но я новичок в Django и немного новичок в Python. Идет ли игра (в нижнем регистре) от

class GameUpdateView(UpdateView):
    model = Game

?

Вернуться на верх