Отображение названия блога, даты создания и тела из базы данных на HTML-странице с помощью Django
Моя таблица базы данных :
class Post(models.Model):
title = models.CharField(max_length=100)
body = models.CharField(max_length=1000000)
created_at = models.DateTimeField(default=datetime.now, blank=True)
Мое мнение:
def post(request, pk):
posts = Post.objects.filter(title=pk.replace('-', ' '))
blog_content = Post.objects.all()
return render(request, 'posts.html', {'posts': posts}, {'blog_content': blog_content})
Мой шаблон :
{% block content %}
<section class="blog-list px-3 py-5 p-md-5">
<div class="container">
<div class="item mb-5">
<div class="media">
<div class="media-body">
<h1 class="title mb-1"><a style = "text-decoration:none;">{{blog_content.title}}</a></h1>
<div class="meta mb-1"><span class="date">{{blog_content.body}}</span></div>
<div class="intro">{{blog_content.created_at}}</div>
</div><!--//media-body-->
</div><!--//media-->
</div><!--//item-->
</div>
</section>
{% endblock %}
Когда я нажимаю на заголовок отдельного блога на главной странице, он должен показать заголовок, дату создания и тело сообщения на странице posts.html. Но он показывает необработанные html и css теги! Каково решение?
Вот подробная информация о странице index (домашняя страница) :
View :
def index(request):
posts = Post.objects.all()
return render(request, 'index.html', {'posts': posts})
Шаблоны :
<div class="media">
<div class="media-body">
{% for post in posts reversed %}
<h3 class="title mb-1"><a style = "text-decoration:none;" href="{% url 'post' post.title|slugify %}">{{post.title}}</a></h3>
<div class="meta mb-1"><span class="date">{{post.created_at}}</span></div>
<div class="intro">{{post.body|truncatewords:30}}</div>
<a class="more-link" href="{% url 'post' post.title|slugify %}">Read more →</a>
{% endfor %}
</div><!--//media-body-->
</div><!--//media-->
Возможно, эти две проблемы приводят к ошибке, которую вы видите:
Во-первых, ваш тег якоря не имеет href, поэтому он не будет ссылаться на другую страницу.
<a style = "text-decoration:none;">{{blog_content.title}}</a>
Должно быть,
<a href="{% url 'posts' %}" style="text-decoration:none;">{{blog_content.title}}</a>
(я просто предполагаю, что вы хотите сделать ссылку на просмотр ваших сообщений)
Во-вторых, эта строка выглядит подозрительно:
posts = Post.objects.filter(title=pk.replace('-', ' '))
Поскольку вы не объявили первичный ключ для вашей модели Post, Django автоматически создает целочисленные первичные ключи (pk), поэтому фильтрация поля title в Post путем замены несуществующего - пробелом не имеет смысла.
Редактирование
.
Попробуйте заменить,
<a style = "text-decoration:none;" href="{% url 'post' post.title|slugify %}">{{post.title}}</a>
<!-- WITH -->
<a style = "text-decoration:none;" href="{% url 'post' post.pk %}">{{post.title}}</a>
Затем в просмотре сообщений откройте доступ к нему по:
posts = Post.objects.filter(pk=pk)
Это может означать, что вам придется изменить urls.py:
path('post/<int:pk>', views.post, name='post'),