Переменные тега шаблона в django не отображаются - PullRequest
1 голос
/ 09 мая 2020

Я создаю блог и новичок в django. Я пытаюсь создать страницу отображения сообщений, но переменные тегов не работают.

urls.py

urlpatterns = [
.
.
.

    path('post/<slug>/', views.post_detail, name='post_detail'),
]

views.py

.
.
.
def post_detail(request, slug):
    all_posts= Post.objects.all()
    this_post = Post.objects.filter(post_slug=slug)
    return render(request = request, 
    template_name = 'blog/post_detail.html', 
    context = {'this_post':this_post, 'all_posts':all_posts})
.
.
.

post_detail. html

{% extends 'blog/header.html' %}

{% block content %}
  <div class="row">
    <div class="s12">
      <div class="card grey lighten-5 hoverable">
        <div class="card-content teal-text">
            <span class="card-title">{{  this_post.post_title  }}</span>
            <p style="font-size:70%">Published {{  this_post.post_published  }}</p>
            <p>{{  this_post.post_content  }}</p>
        </div>
       </div>
    </div>
{% endblock %}

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

this_post не является экземпляром модели - это набор запросов. Post.objects.filter() всегда возвращает Queryset, даже если есть только одна запись. Атрибут post_title является атрибутом экземпляра Post, а не набора запросов.

Вы можете сделать либо:

  1. использовать get():
Post.objects.get(post_slug=slug)
... или добавьте first() в набор запросов:
Post.objects.filter(post_slug=slug).first()

В чем разница?

  1. get() вернет экземпляр или поднимет Post.DoesNotExist исключение, если сообщение не найдено.
  2. filter(...).first() вернет первый результат из набора запросов (как экземпляр модели) или None, если ничего не было найдено.
0 голосов
/ 09 мая 2020

вместо фильтрации необходимо выделить один объект, тогда только он будет доступен в подробном просмотре. Результатом filer будет список.

this_post = Post.objects.get(post_slug=slug)

или

this_post = get_object_or_404(Post, post_slug=slug)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...