Рендеринг данных представления Django в HTML
Я создаю учебный портал, на котором студенты могут учиться по различным книгам. Каждая книга будет иметь различные главы / темы.
Каждая тема имеет уникальный slug, как отражено в приведенной ниже модели, который мы хотим отобразить / показать на HTML странице, при нажатии на него.
Я хочу показывать содержимое темы на отдельной HTML-странице, когда кто-то нажимает на эту конкретную тему. Я написал приведенный ниже код, однако, не смог заполнить данные на HTML.
Моя модель Django, view.py и url.py выглядят следующим образом.
Моя модель Django выглядит следующим образом:
class book_explination(models.Model):
title = models.CharField (max_length = 255)
slug = models.SlugField(max_length= 250, null = True, blank = True, unique= True)
lesson_no = models.CharField (max_length = 255)
book_text = models.TextField (blank=False, null=False)
Моя точка зрения такова:
def topic_detail(request, url):
topic_detail = book_explination.objects.get(slug = url)
return render(request, 'blog/topic_detail.html', {'topic_detail':topic_detail})
Страница HTML-рендеринга выглядит следующим образом:
{% block content %}
<div class="container">
<p> {{lesson_no | safe}} </p>
<p> {{book_text | safe}} </p>
<p> {{book_text_explination | safe}} </p>
</div>
{% endblock %}
<ul>
{% for c in topic_detail %}
<li>{{ c.lesson_no }}</li>
<li>{{ c.lesson_no }}</li>
<li>{{ c.lesson_no }}</li>
{% endfor %}
</ul>
Буду очень благодарен за вашу помощь. Спасибо
Вам нужно добавить ваш цикл внутри тега block
{% block content %}
<div class="container">
<p> {{lesson_no | safe}} </p>
<p> {{book_text | safe}} </p>
<p> {{book_text_explination | safe}} </p>
</div>
<ul>
{% for c in topic_detail %}
<li>{{ c.lesson_no }}</li>
<li>{{ c.lesson_no }}</li>
<li>{{ c.lesson_no }}</li>
{% endfor %}
</ul>
{% endblock %}
Добавление: Я рекомендую вам использовать get_object_or_404
from django.shortcuts import get_object_or_404
def topic_detail(request, url):
topic_detail = get_object_or_404(book_explination, slug=url)
return render(request, 'blog/topic_detail.html', {'topic_detail':topic_detail})