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 шт):
В данном случае 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.