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, хотя, как упоминается, вы не можете оставлять ее включенной все время, поскольку многие другие коды ожидают такого поведения пустой строки.