Я уже всю голову сломал, а как бы сделать, чтоб вывести список всех категорий и при нажатии на одну из них выводить список статей этой категории(ну это вроде понятно). Вроде элементарно, а уже два дня не могу получить список категорий для выбора. По идее, в вьюхе categories = Post.query.order_by(Post.category).all() потом в шаблоне {% for category in categories %} но он выводит все статьи в перемешку и они повторяются. Если кому-то не лень, подскажете? За какой-то хренью уже 2 дня сижу.
Ну по идее просто categories = Category.query.all() Соберем все категории с блога Потом выводим список категорий в цикле например, у каждой категории при нажатии формируется маршрут на список статей данной категории. Мне кажется ты по урокам еще не дошел до ролика, где я создавал Категории Нужно создать маршрут в котором будем получать строку с названием категории, потом брать посты этой категории и выводить @posts.route('/posts//', methods=['GET', 'POST']) @login_required def category(category_str): current_category = Post.query.filter_by(category=category_str).first() posts_category = Post.query.filter_by(category=category_str).all() return render_template('post/all_posts_category.html', post_category=posts_category, current_category=current_category, title='Рубрика ' + category_str) Получаем категорию, сбираем все посты данной категории Еще раз спасибо за хороший вопрос)) На связи
@@PythonDevelopment Не, это как раз ясно. То, что написал ты работало бы если бы была отдельная модель категории, а у нас же категория - это поле в модели поста. Я пытаюсь вывести менюшку, чтобы можно было вывести все категории добавленных постов, при нажатии на которую вызывается функция current_category c всеми постами данной категории.
@@elnik87 Так смотри. У Post есть поле category. Есть посты, у них есть категории. Если взять эти посты и про итерироваться по их категориям, то мы получим список категорий постов. Типа: list_posts = 'Список постов' for post in list_posts: post.category Так? Мы выводим категорию каждого поста. Апдейт: При нажатии на категорию выводим все посты данной категории: Функция current_category принимает строку с именем категории, ищет по имени категории все посты, у которые есть данная категория и выводит их. Тебе нужно создать запрос, в котором ты в модели Post отфильтруешь имя текущей категории, вывести нужно список (коллекцию) Примерно: current_category = Post.query.filter_by(category = category).all() category первое - поле в модели пост category второе - имя категории (строка) переданная в функцию просмотра. Ты назвал свою функцию def current_user() Жду ответа =)
@@PythonDevelopment Вот здесь все получается примерно как ты описал, но сколько постов, столько и категорий и они между собой повторяются, а нужно просто вывести список категорий, которые записаны в slectfield в формах и записываются в моделях при добавлении поста. def posts_categories(): posts_category = Post.query.filter_by(category=Post.category).all() current_category = Post.query.filter_by().first() return render_template('post/posts_categories.html', current_category=current_category, posts_category=posts_category, categories=categories, title='Направления') Ну а дальше перебираешь в шаблонах в цикле. Я вроде как-то делал методом тыка через request, но удалил))
@@elnik87 class Tag(db.Model): __tablename__ = 'tags' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20), unique=False, nullable=False) post_id = db.Column(db.Integer, db.ForeignKey('posts.id', ondelete='CASCADE'), nullable=False) Вроде в группе разобрались что лучше создать модель Category по типу Tag а в Post добавишь categories = db.relationship('Category', backref='category_post', lazy=True, cascade="all, delete-orphan") for category in post.categories: category.name вот тебе и список all_categories = Category.query.all() Список всех категорий проекта. Можно использовать set() и будут только уникальные категории Да и у алхимии думаю рецепты есть на этот счет) пока что имеем
Я уже всю голову сломал, а как бы сделать, чтоб вывести список всех категорий и при нажатии на одну из них выводить список статей этой категории(ну это вроде понятно).
Вроде элементарно, а уже два дня не могу получить список категорий для выбора.
По идее, в вьюхе
categories = Post.query.order_by(Post.category).all()
потом в шаблоне
{% for category in categories %}
но он выводит все статьи в перемешку и они повторяются.
Если кому-то не лень, подскажете? За какой-то хренью уже 2 дня сижу.
Ну по идее просто categories = Category.query.all()
Соберем все категории с блога
Потом выводим список категорий в цикле например, у каждой категории при нажатии формируется маршрут на список статей данной категории. Мне кажется ты по урокам еще не дошел до ролика, где я создавал Категории
Нужно создать маршрут в котором будем получать строку с названием категории, потом брать посты этой категории и выводить
@posts.route('/posts//', methods=['GET', 'POST'])
@login_required
def category(category_str):
current_category = Post.query.filter_by(category=category_str).first()
posts_category = Post.query.filter_by(category=category_str).all()
return render_template('post/all_posts_category.html', post_category=posts_category,
current_category=current_category, title='Рубрика ' + category_str)
Получаем категорию, сбираем все посты данной категории
Еще раз спасибо за хороший вопрос)) На связи
@@PythonDevelopment Не, это как раз ясно. То, что написал ты работало бы если бы была отдельная модель категории, а у нас же категория - это поле в модели поста.
Я пытаюсь вывести менюшку, чтобы можно было вывести все категории добавленных постов, при нажатии на которую вызывается функция current_category c всеми постами данной категории.
@@elnik87 Так смотри. У Post есть поле category. Есть посты, у них есть категории. Если взять эти посты и про итерироваться по их категориям, то мы получим список категорий постов.
Типа:
list_posts = 'Список постов'
for post in list_posts:
post.category
Так? Мы выводим категорию каждого поста.
Апдейт:
При нажатии на категорию выводим все посты данной категории:
Функция current_category принимает строку с именем категории, ищет по имени категории все посты, у которые есть данная категория и выводит их. Тебе нужно создать запрос, в котором ты в модели Post отфильтруешь имя текущей категории, вывести нужно список (коллекцию)
Примерно:
current_category = Post.query.filter_by(category = category).all()
category первое - поле в модели пост
category второе - имя категории (строка) переданная в функцию просмотра.
Ты назвал свою функцию def current_user()
Жду ответа =)
@@PythonDevelopment
Вот здесь все получается примерно как ты описал, но сколько постов, столько и категорий и они между собой повторяются,
а нужно просто вывести список категорий, которые записаны в slectfield в формах и записываются в моделях при добавлении поста.
def posts_categories():
posts_category = Post.query.filter_by(category=Post.category).all()
current_category = Post.query.filter_by().first()
return render_template('post/posts_categories.html', current_category=current_category,
posts_category=posts_category, categories=categories, title='Направления')
Ну а дальше перебираешь в шаблонах в цикле.
Я вроде как-то делал методом тыка через request, но удалил))
@@elnik87
class Tag(db.Model):
__tablename__ = 'tags'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20), unique=False, nullable=False)
post_id = db.Column(db.Integer, db.ForeignKey('posts.id', ondelete='CASCADE'), nullable=False)
Вроде в группе разобрались что лучше создать модель Category по типу Tag
а в Post добавишь
categories = db.relationship('Category', backref='category_post', lazy=True, cascade="all, delete-orphan")
for category in post.categories:
category.name
вот тебе и список
all_categories = Category.query.all()
Список всех категорий проекта.
Можно использовать set() и будут только уникальные категории
Да и у алхимии думаю рецепты есть на этот счет)
пока что имеем