Python django как сделать админку для статического контента?

У меня есть страница в django, вынес её даже в приложение, на ней есть блоки и тому подобное. Вот пример:введите сюда описание изображения

Мне надо чтобы весь этот текст можно было редактировать через админку технически не подкованным пользователем. И потом выводить это на страницу для всех. Задача простая, но решаю её уже день. Создал модель, но не понимаю как вывести на страницу, юзаю цикл и блоки из-за этого дублируются. На PHP делал это за полчаса, по такому алгоритму:

В таблице со столбцами: Контент, название

И на страницу вставлял содержимое по названию из массива, который загружал ajax.

Как мне реализовать такое на django? Как я понимаю здесь модели и не нужны?

Мой код сейчас

models.py

from django.db import models


class Content_index(models.Model):
    name = models.CharField('Название (не удалять)', max_length=32)
    content = models.TextField('Содержимое блока')

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Содержимое'
        verbose_name_plural = 'Содержимое'

admin.py:

from django.contrib import admin
from .models import Content_index


admin.site.register(Content_index)

views.py:

from django.shortcuts import render
from .models import Content_index

def index(request):
    content_index = Content_index.objects.all()
    return render(request, 'main/index.html', {'content': content_index})

P.S в идеале иметь возможность менять изображения через админку тоже


Ответы (1 шт):

Автор решения: onlikerop

В данном случае content_index - это даже не совсем список, а именно, что QuerySet. Тем не менее, по нему можно итерироваться так же, как и по списку:

{% if content %}
        {% for post in content %}
                <div>
                    <h1>{{post.name}}</h1>
                    <p>{{post.content}}</p>
                    <hr>
                </div>
        {% endfor %}
    {% else %}
        <h2>Опубликованных статей нет!</h2>
{% endif %}

UPD: Если я правильно понял обновлённый вопрос, то нужно разные блоки выводить в разные места на странице. В таком случае нужно передавать конкретные блоки отдельно в отображении:

def index(request):
    content_index = Content_index.objects.all()
    blocks = []
    for e in list(Articles.objects.all().values("name")):
        blocks.append(e["name"])
    content = []
    for e in list(Articles.objects.all().values("content")):
        content.append(e["content"])
    bc = {b: c for b, c in zip(blocks, content)}
    return render(request, 'main/index.html', bc)

Далее просто указываете названия блоков в местах на странице, где их нужно вывести. А для администрирования, как я уже сказал, можно использовать встроенную админку Django, либо написать форму с использованием jQuery.

→ Ссылка