Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Sub-modules phase C: module page and cohort-flow rendering

オープン
#399 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
45/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
django, playwright, python

調査の方向性

docs/planning/shared-curriculum-submodules-design.md を読み、続いて phase B の fixture と、一覧にある views、templates、services、flow entry points を調査します。grouped module rendering、anchored homework、flow items、breadcrumbs、inventory、syllabus counts、sitemap output のカバレッジを追加する前に、対象の Django テストを実行します。flat modules が byte-identical のまま維持され、split modules が正しくレンダリングされて anchors を正しく報告し、Django、full、Playwright のチェックに合格すれば完了です。

索引モデルが issue の本文から書いたものです。

説明

courses enhancement P1

Part of the shared-curriculum sub-modules umbrella (#396), phase C of 4. Depends on #398 (phase B importer). Full design: _docs/planning/shared-curriculum-submodules-design.md, "Constraints and what the renderers must know" section.

Goal

Module pages, the cohort curriculum flow, the homework breadcrumb, and the shared-curriculum inventory correctly render/report sub-module structure and per-anchor homework placement, when present. Flat modules (the common case, zero sub-modules) must render byte-identical to today.

Scope

  1. courses/views/shared_course.py (module page view) and courses/templates/courses/shared_module.html / _shared_module_rail.html: when a module has sub-modules, group its lesson list by sub-module in order (each group gets a heading with a fragment anchor, not its own route/URL — confirmed in the design doc as sufficient for now); after each sub-module's lesson group, render that sub-module's anchored homework link if one exists; after the last group (or immediately, for a flat module), render the module-anchored homework link if one exists. A flat module (no sub-modules) renders exactly as today — verify with a snapshot/diff test.
  2. courses/services/curriculum_flow.py _shared_flow: unchanged loop shape (one ModuleFlowItem per placement, ordered by placement position). ModuleFlowItem gains an optional sub_module, so the cohort page can title an entry "Module 1 · Part 2: Agents" when anchored to a part. A module with two anchored homeworks (a module-level and a part-level, if that ever occurs) correctly yields two flow entries.
  3. courses/views/homework_context.py: the shared-curriculum breadcrumb resolves homework.shared_module_placements to its anchor and links the module page, including the sub-module's fragment anchor when the homework is anchored to a part.
  4. courses/services/shared_curriculum_inventory.py: add sub_module_slug to each placement row in the reconciliation report.
  5. Confirm (per the design doc's explicit check) that courses/views/course_page_context.py:349 (family syllabus module count) and content/public_views.py:1296 (sitemap) need NO changes — both are root-SharedModule-only by construction and must stay that way (add a regression test asserting a split module still counts as one module in the family syllabus count and produces one sitemap entry, not one per sub-module).

Non-goals

  • No zoomcamp-ops/course-repository changes (phase D).
  • No sub-module standalone pages/routes (explicitly deferred per the design doc's open question 3 — fragment anchors on the existing module page only).
  • No change to courses/views/dashboard_homeworks.py (confirmed in the design doc: it's keyed purely on Homework rows and never reads placements, so it needs no change — verify this holds, don't change it speculatively).

Dependencies

  • Depends on: #398.
  • Blocks: #399 (phase D) only in the sense that phase D's rollout order requires B+C deployed before the checker pin updates; phase D's own repository-side work can be scoped/started independently.

Acceptance criteria

Django and integration
  • make django-check passes; make test passes.
  • New rendering tests using the phase B fixture: a split module's page groups lessons correctly, shows the right homework link after each anchor, fragment anchors resolve; a flat module's page is byte-identical to its pre-phase-C rendering (regression guard).
  • ModuleFlowItem.sub_module renders correctly in the cohort page's flow list for both anchor types.
  • Family syllabus module count and sitemap entry count are unaffected by a split module (both stay root-only).
  • Inventory report includes sub_module_slug for anchored placements and is null/absent for module-level placements.
Browser
  • make test-playwright-core passes.
  • Screenshot verification: a split-module page (using the phase B fixture data seeded into a local dev DB) renders sensibly at desktop and mobile, light and dark, with clear visual grouping between parts.
主要言語
Python
スター
0
フォーク
0
PR マージ指標
30日以内にマージされた PR はありません

環境構築

  • Dockerfile または Docker Compose ファイルあり
  • プルリクエストのテンプレートなし
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

DataTalksClub/website のほかの issue

DataTalksClub/website の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。