Данные модели Django не отображаются
Данные моей модели для моего сайта не появляются на новой странице при использовании slug, и я не знаю, почему это происходит, поскольку мне удалось заставить его работать с предыдущей страницей сайта, но когда я пытаюсь вызвать его на моей html-странице, ничего не загружается, и я использую slug в представлении для доступа к странице.
Models.py
class Parasite(models.Model):
name = models.CharField(max_length=128, unique=True)
slug = models.SlugField(max_length=100, unique=True)
description = models.TextField(max_length=100000)
image = models.ImageField(upload_to='parasite_images', default='default/default.jpg', blank=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Parasite, self).save(*args, **kwargs)
def __str__(self):
return self.name
views.py
def view_parasite(request,parasite_name_slug):
context_dict = {}
try:
parasite = Parasite.objects.get(slug=parasite_name_slug)
context_dict['parasites'] = parasite
except Parasite.DoesNotExist:
context_dict['parasites'] = None
return render(request, 'parasites_app/viewpara.html', context = context_dict)
viewpara.html
{% extends 'parasites_app/base.html' %}
{% load static %}
{% block content_block %}
{% for p in parasite %}
<h3>{{p.name}}</h3>
{% endfor %}
{% endblock %}
urls.py
urlpatterns = [
path('login/', views.user_login, name='login'),
path('logout/', views.user_logout, name='logout'),
path('admin/', admin.site.urls),
path('', views.public, name='public'),
path('public/', views.public, name='public'),
path('private/', views.logged_in_content, name='private'),
path('public/<slug:parasite_name_slug>/',views.view_parasite, name='view_parasite'),
path('<slug:post_name_slug>/', views.show_post, name='show_post'),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Первая ошибка - вы получаете один объект Parasite (потому что используете метод get) и вызываете его с множественным именем 'parasites':
parasite = Parasite.objects.get(slug=parasite_name_slug)
context_dict['parasites'] = parasite
Вторая ошибка - когда вы хотите показать это в шаблоне, вы вызываете одиночный parasite, но вы решили назвать ключ parasites.
{% for p in parasite %}
Третья ошибка - не используйте цикл for для одного объекта, просто вызовите его.
Ответ:
views.py
parasite = Parasite.objects.get(slug=parasite_name_slug)
context_dict['parasite'] = parasite
viewpara.html
{% block content_block %}
{{ parasite.name }}
{% endblock %}