Django не может передать атрибуты модели по slug в шаблон

Я задал модель, включающую некоторые атрибуты, и могу получить модель по slug в views.py. Однако я не могу вывести ее атрибуты в шаблон. Я что-то упустил?

Model.py

class article(models.Model):
title = models.CharField(max_length=200)
content = RichTextUploadingField()
slug = models.SlugField(unique=True, max_length=200)

def __str__(self):
    return self.title

Views.py

def post_details(request, slug):
 details = get_object_or_404(article, slug=slug)
 context = {
    details: 'details'
 }
 return render(request, 'post_details.html', context)

Urls.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
  path('', views.home, name='home'),
  path('<slug:slug>/', views.post_details, name='post_details')
]

Я задал URL для получения данных модели статьи по slug в index.html

<h4 class="title"><a href="{% url 'post_details' article.slug %}">{{ article.title }}</a></h4>

post_details.html

<h2>{{ details.slug }}</h2>

Я могу получить доступ к этому шаблону по slug, но не могу получить никаких атрибутов, используя тег 'details'

Вы неправильно указали ключ: значение в дикте context в views.py:


context = {
    details: 'details'
 }

# should be:
context = {
    'details': details
}

В вашей версии есть dict с ключом фактического экземпляра модели, указывающий на значение строки "details", что противоположно тому, что вы хотите :-)

это "работает" (не вызывает ошибку), потому что шаблоны молча игнорируют отсутствующие ключи/атрибуты при обращении к контекстным переменным.

Существует специальная настройка string_if_invalid, которую вы можете установить в конфигурации вашего шаблона, чтобы сделать более очевидным отсутствие var, хотя, как упоминается, вы не можете оставлять ее включенной все время, поскольку многие другие коды ожидают такого поведения пустой строки.

Вернуться на верх