feat(newsletter): add newsletters listing and detail pages
* Created a newsletters table and added insertion logic during newsletter send. * Added a /newsletters route to display a list of sent newsletters. * Implemented a /newsletter/<int:newsletter_id> route for detailed view. * Developed new templates with navigation, including unsubscribe links. * Enhanced front-end styling and layout for newsletter pages.
This commit is contained in:
parent
e3ae855a0b
commit
db5d631b0d
6 changed files with 186 additions and 6 deletions
|
|
@ -9,7 +9,10 @@
|
|||
<body>
|
||||
<header>
|
||||
<nav>
|
||||
<span>Ride</span><span style="color: #1e4e9c;">Aware</span>
|
||||
<a href="/">
|
||||
<span>Ride</span><span style="color: #1e4e9c;">Aware</span>
|
||||
</a>
|
||||
<a href="/newsletters">Newsletters</a>
|
||||
</nav>
|
||||
</header>
|
||||
<main>
|
||||
|
|
@ -84,7 +87,7 @@
|
|||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<footer>
|
||||
<footer class="normal-footer">
|
||||
Copyright © 2025 RideAware. All rights reserved.
|
||||
</footer>
|
||||
<script src="/static/js/main.js"></script>
|
||||
|
|
|
|||
35
templates/newsletter_detail.html
Normal file
35
templates/newsletter_detail.html
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>RideAware - Newsletter Detail</title>
|
||||
<link rel="stylesheet" href="/static/css/styles.css" />
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<nav>
|
||||
<a href="/">
|
||||
<span>Ride</span><span style="color: #1e4e9c;">Aware</span>
|
||||
</a>
|
||||
<a href="/newsletters">Newsletters</a>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div class="newsletter-detail">
|
||||
<h1>{{ newsletter.subject }}</h1>
|
||||
<p class="newsletter-time">Sent on: {{ newsletter.sent_at }}</p>
|
||||
<div class="content">
|
||||
{{ newsletter.body | safe }}
|
||||
</div>
|
||||
<a href="/newsletters" class="back-link">← Back to Newsletters</a>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="fixed-footer">
|
||||
<p>© 2025 RideAware. All rights reserved.</p>
|
||||
</footer>
|
||||
<script src="/static/js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
43
templates/newsletters.html
Normal file
43
templates/newsletters.html
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>RideAware - Newsletters</title>
|
||||
<link rel="stylesheet" href="/static/css/styles.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<nav>
|
||||
<a href="/">
|
||||
<span>Ride</span><span style="color: #1e4e9c;">Aware</span>
|
||||
</a>
|
||||
<a href="/newsletters">Newsletters</a>
|
||||
</nav>
|
||||
</header>
|
||||
<main>
|
||||
<h1>RideAware Newsletters</h1>
|
||||
{% if newsletters %}
|
||||
{% for nl in newsletters %}
|
||||
<div class="newsletter">
|
||||
<h2>
|
||||
<a href="{{ url_for('newsletter_detail', newsletter_id=nl.id) }}">{{ nl.subject }}</a>
|
||||
</h2>
|
||||
<p class="newsletter-time">Sent on: {{ nl.sent_at }}</p>
|
||||
<div class="newsletter-body">
|
||||
{{ nl.body | safe | truncate(200) }}
|
||||
</div>
|
||||
<a href="{{ url_for('newsletter_detail', newsletter_id=nl.id) }}" class="read-more">Read More</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<p>No newsletters to display yet.</p>
|
||||
{% endif %}
|
||||
</main>
|
||||
|
||||
<footer class="fixed-footer">
|
||||
<p>© 2025 RideAware. All rights reserved.</p>
|
||||
</footer>
|
||||
<script src="/static/js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue