Как добавить слаг в приложение блога Flask

Недавно я пытаюсь создать блог после мега-урока Grinberg Miguel Flask. У меня есть запас, когда я пытаюсь вставить заголовок своего сообщения так, чтобы при щелчке по нему отображалась деталь. Это мой код:

(models.py)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(225))
    slug = db.Column(db.String(300))
    body = db.Column(db.Text)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)

def __repr__(self):
    return '<Post {}>'.format(self.body)

@staticmethod
def slugify (target, value, oldvalue, initiator):
    if value and (not target.slug or value != oldvalue):
        target.slug = slugify(value)
db.event.listen(Post.title, 'set', Post.slugify, retval=False)

my ROUTE code goes here:
from app.models import  Post

@bp.route('/', methods=['GET', 'POST'])
@bp.route('/index', methods=['GET', 'POST'])
def index():
    page = request.args.get('page', 1, type=int)
    posts = Post.query.order_by(Post.timestamp.desc()).paginate(
    page, current_app.config['POSTS_PER_PAGE'], False)
    next_url = url_for('main.explore', page=posts.next_num) \
    if posts.has_next else None
        prev_url = url_for('main.explore', page=posts.prev_num) \
    if posts.has_prev else None
return render_template('index.html', title=_('Home'),
                       posts=posts.items, next_url=next_url,
                       prev_url=prev_url)

@bp.route('/explore',methods=['GET', 'POST'])
@login_required
def explore():
    form = PostForm()
    if form.validate_on_submit():
        post = Post(body=form.post.data, author=current_user)
        db.session.add(post)
        db.session.commit()
        flash(_('Your post is now live!'))
        return redirect(url_for('main.index'))
    return render_template('create.html', title=_('Create'),form=form)

@bp.route('/<slug>')
def detail(slug):
    posts = Post.query.order_by(Post.timestamp.desc()).paginate(
    page, current_app.config['POSTS_PER_PAGE'], False)
return render_template('detail.html', title=_('Home'),
                       posts=posts.items, next_url=next_url,
                       prev_url=prev_url)

Я увидел эту ошибку, когда запустил код:

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: post.title [SQL: 'SELECT post.id AS post_id, post.title AS post_title, post.slug AS post_slug, post.body AS post_body, post.timestamp AS post_timestamp, post.user_id AS post_user_id

Вы используете Flask-Migrate для обработки изменений схемы базы данных? Ошибка не связана с функцией slug, с которой вы работаете, SQLAlchemy жалуется, что в вашей таблице post нет столбца title. Вы определили это в своей модели, поэтому кажется, что вы не применили соответствующие изменения в своей базе данных.

Miguel 20.04.2018 22:34

Да, я использую миграцию фляги.

Mavis W L 22.04.2018 00:29

Я прошел обновление миграции базы данных. но есть укомплектованный index.html. {% для публикации в сообщениях%} <td> <h3> <a href = "{{ url_for('main.detail', slug=post.slug)}}"> {{post. title}} </a> </h3> </td> <td> <p> {{post.body | safe}} </p> </td> {% include '_post.html'%} {% endfor%} также мой detail.html: {% block app_content%} {{posts.title}} {{posts.body}} {% endblock%} и

Mavis W L 22.04.2018 15:26

Извините, но я не понимаю, в чем заключается ваша новая проблема. У вас есть ошибки?

Miguel 22.04.2018 19:41

я получил это: файл "/root/ogahslab/app/templates/base.html", строка 50, в блоке "контент" {% block app_content%} {% endblock%} File "/ root / ogahslab / app / templates / index.html ", строка 8, в блоке" app_content "<td> <h3> <a href = "{{ url_for('main.detail', slug=post.slug)}}"> {{post.title} } </a> </h3> </td> Файл "/root/ogahslab/venv/lib/python3.6/site-packages/flask/helpe‌ rs.py", строка 333, в url_for return appctx.app .handle_url_build_error (ошибка, конечная точка, значения) werkzeug.routing.BuildError: не удалось создать URL-адрес для конечной точки main.detail. Вы забыли указать значения ['slug']?

Mavis W L 23.04.2018 22:45

Ошибка говорит о том, что у вас есть вызов url_for() для вашего маршрута main.detail, в котором отсутствует аргумент slug. Я предполагаю, что в вашей базе данных есть хотя бы один пост-объект, для которого для slug установлено значение None.

Miguel 24.04.2018 07:47

Глядя на мою модель поста выше. Пожалуйста, дайте мне подсказку, как решить эту проблему. Я застрял

Mavis W L 25.04.2018 11:30

Это не проблема вашей модели, это неполные данные в вашей базе данных. Убедитесь, что для всех сообщений, которые у вас есть в базе данных, установлены ярлыки, или, если хотите, удалите свою базу данных и начните с нуля, убедившись, что все сообщения имеют ярлыки.

Miguel 26.04.2018 05:32

Вместо заголовка я получил пробелы в содержании. Где я ошибаюсь

Mavis W L 26.04.2018 19:02

спасибо, Мигель, я получил это сразу после нескольких отладок. только что отредактировал эту строку post = Post (body = form.post.data, title = form.title.data) в моем маршруте исследования. Еще раз спасибо за ваше время

Mavis W L 27.04.2018 00:48
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
10
1 019
1

Ответы 1

Просто убедитесь, что имя класса соответствует имени таблицы. И код должен работать нормально

Другие вопросы по теме