Я немного новичок в этом, и я думаю, что я неправильно понял некоторые вещи, поэтому я попытаюсь описать это как можно лучше.
У меня есть 3 таблицы (модели), Игра, Глава, Поток , Глава и Тема связаны с игровым столом.
models.py
class Game(models.Model):
title = models.CharField(max_length=100)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
def __str__(self):
return self.title
class Chapter(models.Model):
title = models.CharField(max_length=80)
content = models.CharField(max_length=10000, null=True)
game = models.ForeignKey(Game, on_delete=models.CASCADE)
def __str__(self):
return self.chapter
class Thread(models.Model):
title = models.CharField(max_length=100)
content = models.CharField(max_length=1000, null=True)
game = models.ForeignKey(Game, on_delete=models.CASCADE)
def __str__(self):
return self.title
views.py
def chapter(request, game_id):
auth = top_menu = True
chapters = Chapter.objects.filter(game=game_id)
return render(request, 'chapters.html', {"chapters": chapters, "auth": auth, "top_menu": top_menu})
def thread(request, game_id):
auth = top_menu =True
threads = Thread.objects.filter(game=game_id)
return render(request, 'threads.html', {"auth": auth, "threads": threads, "top_menu": top_menu})
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', index, name="index"),
path('signup/', signup, name="signup"),
path('logout/', logout_view, name="logout"),
path('login/', login_view, name="login"),
path('<int:game_id>/chapters/', chapter, name="chapter"),
path('<int:game_id>/threads/', thread, name="thread"),
]
index. html
{% extends 'base.html' %}
{% block content %}
<div class="container">
<div class="wrapper">
<div class="row">
<div class="col-lg-12 text-center" style="margin-bottom:80px;">
<h1>Welcome to Solo Rpg Helper</h1>
</div>
</div>
{% if auth %}
<div class="row">
<div class="col-lg-12 text-center">
<h1>Your games:</h1>
<ul class="list-group list-group-flush">
{% for game in games.all %}
<a href="{% url 'chapter' game.id %}"><li class="list-group-item">{{ game.title }}</li></a>
{% endfor %}
</ul>
</div>
</div>
{% else %}
<div class="row">
<div class="col-lg-12 text-center sign-buttons">
<h3><a href="{% url 'login' %}" class="btn btn-lg btn-success">Sign in</a> <a href="{% url 'signup' %}" class="btn btn-lg btn-danger">Sign up</a></h3>
</div>
</div>
{% endif %}
</div>
</div>
{% endblock %}
chapter. html
{% extends 'base.html' %}
{% block top_menu %}
<li><a href="{% url 'index' %}">Games</a></li>
<li><a href="{% url 'chapter' 1 %}">Chapters</a></li>
<li><a href="{% url 'thread' 1 %}">Threads</a></li>
{% endblock %}
{% block content %}
<div class="container">
<div class="wrapper">
{% for chapter in chapters.all %}
<div class="row">
<div class="col-lg-6">
<h1>{{ chapter.title }}</h1>
</div>
<div class="col-lg-6">
<p>{{ chapter.content }}</p>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}
index. html отлично работает, потому что я oop игр, так что я могу получить доступ к game.id.
В chapter. html Я хочу снова использовать game.id, но я не уверен, как получить к нему доступ, хотя он передан в главе функций в views.py (я вижу это в терминале).
Если я использую это так:
<li><a href="{% url 'chapter' 1 %}">Chapters</a></li>
, это работает, но если я использую game.id, как в index. html :
<li><a href="{% url 'chapter' game.id %}">Chapters</a></li>
Я получаю сообщение об ошибке:
Извините за длинный пост.