100日チャレンジ20日目 ミニブログ開発進捗

本日は、ミニブログプロジェクトにおいて、以下の機能改善と問題解決に取り組みました。

1. カテゴリページのページネーションと表示関連の修正

  • layout.html の参照エラー解決:
    • カテゴリページ (category_page.html) で発生していた jinja2.exceptions.TemplateNotFound: layout.html エラーに対し、ベースとなる layout.html を作成し、適切に参照できるようにしました。
  • current_user 未定義エラーの解決:
    • layout.html 内で current_user が未定義であるという jinja2.exceptions.UndefinedError が発生したため、Flask-Login の設定を見直し、app.py での LoginManager の初期化と models.py の User モデルへの UserMixin の継承を確認・修正しました。
  • 記事詳細ページへのリンクエラー解決:
    • カテゴリページから記事詳細ページへのリンク生成時に werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'article_detail' が発生しました。これに対し、app.py に article_detail ルートを正しく定義し、対応する article_detail.html テンプレートを作成することで解決しました。
    • 結果として、カテゴリページが正常に表示され、各記事への「続きを読む」ボタンも機能するようになりました。

2. カテゴリモデルへの追加フィールド実装

  • 仕様書に基づき、SEOおよびOGP対応強化のため、Category モデル (models.py) に以下のフィールドを追加しました。
    • ogp_image
    • meta_keywords
    • canonical_url
    • json_ld
    • ext_json
  • 管理画面 (admin.py および関連テンプレート) で、これらの新しいフィールドをカテゴリ作成・編集時に扱えるように修正しました。
  • 公開側のカテゴリページテンプレート (category_page.html) で、これらの新しいフィールド(特にOGP関連情報)が <head> タグ内に出力されるように修正しました。

3. Flask-Migrate の導入とデータベーススキーマ更新

  • カテゴリモデルへのフィールド追加をデータベースに反映させるため、新たに Flask-Migrate を導入しました。
  • 初期設定とエラー対応:
    • pip install Flask-Migrate を実行し、app.py にて Migrate オブジェクトを初期化しました。
    • flask db init を実行し、マイグレーションリポジトリを作成しました。
    • 途中で RuntimeError: The current Flask app is not registered with this 'SQLAlchemy' instance. エラーが発生しました。app.py と models.py における SQLAlchemy インスタンス (db) の初期化方法とインポート順序を複数回見直し、最終的に models.py で db = SQLAlchemy() と定義し、app.py でそれをインポートして db.init_app(app) を呼び出す形に修正することで解決しました。
  • テーブル不在エラーとマイグレーション再構築:
    • 上記エラー解決後、sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: articles という新たなエラーが発生しました。
    • 調査の結果、自動生成されたマイグレーションファイルの内容が、テーブルを作成する (op.create_table) のではなく、テーブルを削除する (op.drop_table) 操作になっていたことが判明しました。
    • この問題を解決するため、既存のデータベースファイル (miniblog.db) と versions ディレクトリ内の誤ったマイグレーションファイルを削除しました。
    • その後、flask db migrate -m "Create initial database schema" コマンドを再実行し、モデル定義に基づいた正しいテーブル作成コマンド (op.create_table) を含むマイグレーションスクリプトが生成されることを確認しました。
    • 最後に flask db upgrade を実行し、データベーススキーマを正常に更新しました。

以上の作業により、カテゴリ機能が強化され、データベース管理の基盤も整いました。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール