Невозможно отобразить содержимое страницы в Django

Существует приложение posts. Существует модель:

class Post(models.Model):
    text = models.TextField()
    pub_date = models.DateTimeField("date published", auto_now_add=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="posts")
    group = models.ForeignKey(Group, on_delete=models.SET_NULL, related_name="posts", blank=True, null=True)

    def __str__(self):
       # выводим текст поста 
       return self.text

Есть урлы:

path('posts/<str:username>/<int:post_id>/', views.post_view, name='post'),

Существует мнение:

@login_required
def post_edit(request, username, post_id):
    post = get_object_or_404(Post, pk=post_id, author__username=username)

    print(post.text)

    if request.user != post.author:
        return redirect('post', username=username, post_id=post_id)

    form = PostForm(request.POST or None, instance=post)
    if form.is_valid():
        form.save()
        return redirect('post', username=username, post_id=post_id)
    
    return render(request, 'post_new.html', {'form': form, 'post': post})

При проверке здесь в Views все отображается правильно: print(post.text). Однако на HTML-странице ничего не работает?

Есть HTML:

<main role="main" class="container">
    <div class="row">
        <div class="col-md-12">
            <div class="card mb-3 mt-1 shadow-sm">
                <div class="card-body">
                    <p class="card-text">

                        <a href="{% url 'profile' user.username %}">
                            <strong class="d-block text-gray-dark">@{{ post.author.username }}</strong>
                        </a>
                        
                        {{ post.text }}
                    </p>
                    <div class="d-flex justify-content-between align-items-center">
                        <div class="btn-group">
                            
                            <p>Author: {{ post.author.get_full_name }}</p>
                            <p>ID: {{ post.author.username }}</p>
                            
                        </div>
                        
                        <small class="text-muted">{{ post.pub_date }}</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</main>

В чем проблема. Здесь ничего не работает? post.pub_date, post.author.get_full_name... Почему это работает в контексте:

{% for post in posts %} 
....
{{post.text}}
...

Работает через {{ posts.0.author.username }}. Но не работает: {{ post.author.username }}.

Что я делаю не так?

Если вы используете Modelmame.Objects.filter для создания контекстной переменной posts, она (posts) станет списком. Поэтому необходимо использовать следующий синтаксис.

{% for p in posts %} 

{{p.text}}

{% endfor %} 

Если вы используете Modelmame.Objects.get для генерации posts контекстной переменной, она (posts) станет одним объектом. Поэтому необходимо использовать следующий синтаксис.

{{posts.text}}
Вернуться на верх