yxtiblin
@yxtiblin

Как отправить пользователю страницу с json?

Пишу простенький сайтик по учебной практике и нужно на нем получать все данные в формате JSON. Данные в формате json получить могу, но как их отобразить не понимаю. Вот что у меня имеется
views.py
from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.renderers import TemplateHTMLRenderer
from rest_framework.views import APIView
from .serializers import *
from .models import *


def index(request):
    plates = MainPage.objects.all()
    data = {'title': 'YxTiBlya', 'plates': plates}
    return render(request, 'index.html', data)

class MainApiView(APIView):
    renderer_classes = [TemplateHTMLRenderer]
    template_name = 'index.html'
    def get(self, request):
        plates = MainPage.objects.all().values()
        return Response({'title': 'YxTiBlya', 'plates': list(plates)})


urls.py
from django.urls import path
from .views import *

urlpatterns = [
    path('', index, name = 'home'),
    path('main/', MainApiView.as_view())
]


и html темплейты
layout.html
{% load static %}
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    <link rel="stylesheet" href="{% static 'css/main.css' %}">
    <link rel="shortcut icon" href="{% static 'img/icon.png' %}" type="image/png">

    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    {% block img %}
    {% endblock %}
    <div class="nav">
        <div class="content">
            <h3>YxTiBlya</h3>
            
            <div class="rightblock">
                <a href="">Ссылка 1</a>
                <a href="">Ссылка 2</a>
                <a href="">Ссылка 3</a>
            </div>
        </div>
    </div>
    
    <main>
        {% block content %}
        {% endblock %}
    </main>
    <script src="{% static 'js/slider.js' %}"></script>
</body>
</html>


index.html
{% extends 'layout.html' %}

{% block title %}{{title}}{% endblock %}

{% block img %}
<img src="static/img/1.JPG" alt="" class="image">
{% endblock %}

{% block content %}
<div class="features">
    <div class="platefield">
        {% for plate in plates %}
        <div class="plate">
            <div class="imageplate">
                <img src="{{plate.img}}">
            </div>
            <div class="title">
                {{plate.title}}
            </div>
            <div class="content">
                {{plate.content}}
            </div>
        </div>
        {% endfor %}
    </div>
    <div class="githubfield">
        <a href="https://github.com/YxTiBlya?tab=repositories"><h3>GitHub</h3><h4>https://github.com/YxTiBlya?tab=repositories</h4></a>
    </div>
</div>
{% endblock %}


Если вызвать функцию index то вернется обычный html шаблон
62d566fddbb3f434857735.png
А если вызвать класс MainApiView то он вернет чтото непонятное
62d5673e1ffdc753390123.png При этом сам json не приходит при вызове страницы
62d567c0b950d024952315.png
но если закомментировать строчку в классе MainApiView и вызвать его снова
class MainApiView(APIView):
    #renderer_classes = [TemplateHTMLRenderer]
    template_name = 'index.html'
    def get(self, request):
        plates = MainPage.objects.all().values()
        return Response({'title': 'YxTiBlya', 'plates': list(plates)})

То он вернет страницу с json
62d56845f16be100353384.png

Подскажите что я делаю не так
  • Вопрос задан
  • 35 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы