Данные модели django не возвращаются в html, но отображаются в панели администратора

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

from distutils.command.upload import upload
from django.db import models
from django.forms import CharField, ImageField
from django.forms.fields import DateTimeField
from matplotlib import image
from sqlalchemy import true
from django.contrib import admin
# Create your models here.

class Posts(models.Model):
image = models.ImageField(upload_to='images/')

quote = models.TextField(null=True)

date = models.DateTimeField(auto_now_add=True, 
null=True)

views.py

from django.contrib.auth import login, 
authenticate
from django import forms
from django.contrib.auth.models import User

from django.contrib.auth.forms import 
UserCreationForm
from django.shortcuts import render, redirect
from requests import request
from users.forms import SignUpForm
from matplotlib.style import context
from django.http import HttpRequest, HttpResponse

from .models import Posts


def signup(request):
if request.method == 'POST':
    form = SignUpForm(request.POST)# was 
UserCreationForm
    if form.is_valid():
        form.save()
        username = 
form.cleaned_data.get('username')
        raw_password = 
form.cleaned_data.get('password1')
        user = authenticate(username=username, 
password=raw_password)
        login(request, user)
        return redirect('profile')  #profile
else:
    form = SignUpForm() #was UserCreationForm
return render(request, 'signup.html', {'form': 
form})

def posts(request):

userpost = Posts.objects.all()


return render(request, 'posts.html', {'userpost': Posts} )

urls.py

from django.urls import path
from django import urls
from django.conf.urls import url
from . import views
from django.contrib.auth.views import LoginView

urlpatterns = [
 path('login/', LoginView, {'template_name': 
'users/login.html'}, name = 'login'),
 url('signup/',views.signup, name = 'signup'),
 url('posts/',views.posts, name = 'posts'),

 ]

html страница

<div class="container mt-5">
<div class="row">
<div class="col-sm-6">
  <div class="card-header">
    {{ userpost.quote }}
    <br>
    <div class="img">
      <a href=""><img src="{{ userpost.image.url 
   }}"></a>

    </div>
  <div class="card-body">

  </div>
  </div>
   
 </div>
 <div class="col-sm-6">
  <em>
    {{ userpost.date }}
  </em>     

Я не получаю никаких ошибок, но не знаю, в чем проблема.

Если смотреть правильно, то ошибка в самом представлении posts.

Должно быть {'userpost': userpost}, а не {'userpost': Posts} .

Попробуйте это:

views.py

def posts(request):
    userpost = Posts.objects.all()
    return render(request, 'posts.html', {'userpost': userpost})

Затем, вы должны зациклить ваш userpost следующим образом, это только минимально воспроизводимый пример, так как я не могу понять дизайн, но он должен отображать ваши данные:

Файл шаблона:

<div class="container mt-5">
    <div class="row">
    <div class="col-sm-6">
        {% for single_post in userpost %}
        <div class="card-header">
        {{ single_post.quote }}
        <br>
        <div class="img">
            <a href=""><img src="{{single_post.image.url 
        }}"></a>
    
        </div>
        <div class="card-body">
    
        </div>
        </div>
        
        </div>
        <div class="col-sm-6">
        <em>
        {{ single_post.date }}
        </em>
        {% endfor %}

Note: Модели в django обычно имеют форму единственного числа, Будет лучше, если вы назовете ее Post вместо Posts, так как s по умолчанию добавляется в качестве суффикса.

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