{% extends "base.html" %} {% block title %}{% if journey_type == 'inbound' %}{{ destination }} to {{ departure_station_name }} via Eurostar{% elif journey_type == 'return' %}{{ departure_station_name }} to {{ destination }} return via Eurostar{% else %}{{ departure_station_name }} to {{ destination }} via Eurostar{% endif %}{% endblock %} {% block og_title %}{{ self.title()|trim }}{% endblock %} {% block og_description %}Train options from {{ departure_station_name }} to {{ destination }} on {{ travel_date_display }} via Paddington, St Pancras, and Eurostar.{% endblock %} {% block twitter_title %}{{ self.title()|trim }}{% endblock %} {% block twitter_description %}Train options from {{ departure_station_name }} to {{ destination }} on {{ travel_date_display }} via Paddington, St Pancras, and Eurostar.{% endblock %} {% block content %}
| Eurostar {{ destination }} → St Pancras |
Transfer St Pancras → Paddington |
National Rail Paddington → {{ departure_station_name }} |
{% else %}
National Rail {{ departure_station_name }} → Paddington |
Transfer Paddington → St Pancras |
Eurostar St Pancras → {{ destination }} |
{% endif %}
Total | ||||
|---|---|---|---|---|---|---|---|---|---|---|
|
{{ row.depart_destination }} → {{ row.arrive_st_pancras }} (UK)
check in by {{ row.check_in_by }} {% if row.eurostar_duration or row.train_number %} {%- if row.eurostar_duration %}({{ row.eurostar_duration }}){% endif %} {%- if row.eurostar_duration and row.train_number %} · {% endif %} {%- if row.train_number %}{{ row.train_number }}{% endif %} {% endif %} {% if row.eurostar_price is not none %}£{{ "%.2f"|format(row.eurostar_price) }}{% endif %} {% if row.eurostar_plus_price is not none %}£{{ "%.2f"|format(row.eurostar_plus_price) }}{% endif %} |
{{ row.connection_duration }}{% if row.connection_minutes < 45 %} ⚠️{% endif %}
{% if row.circle_services %}
{% if row.circle_services | length > 1 %}
{% set c_early = row.circle_services[0] %}
{% set c = row.circle_services[1] %}
Circle {{ c_early.depart }} → PAD {{ c_early.arrive_pad }} · £{{ "%.2f"|format(c_early.fare) }} next {{ c.depart }} → PAD {{ c.arrive_pad }} {% else %} {% set c = row.circle_services[0] %} Circle {{ c.depart }} → PAD {{ c.arrive_pad }} · £{{ "%.2f"|format(c.fare) }} {% endif %} {% endif %} |
{{ row.depart_paddington }} → {{ row.arrive_uk_station }}
({{ row.gwr_duration }})
{% if row.headcode or row.arrive_platform %}
{{ row.headcode }}{% if row.headcode and row.arrive_platform %} · {% endif %}{% if row.arrive_platform %}Plat {{ row.arrive_platform }}{% endif %} {% endif %} {% if row.ticket_price is not none %}£{{ "%.2f"|format(row.ticket_price) }}{% endif %} |
{% else %}
{{ row.depart_bristol }} → {{ row.arrive_paddington }}
({{ row.gwr_duration }})
{% if row.headcode or row.arrive_platform %}
{{ row.headcode }}{% if row.headcode and row.arrive_platform %} · {% endif %}{% if row.arrive_platform %}Plat {{ row.arrive_platform }}{% endif %} {% endif %} {% if row.ticket_price is not none %}£{{ "%.2f"|format(row.ticket_price) }}{% endif %} |
{{ row.connection_duration }}{% if row.connection_minutes < 80 %} ⚠️{% endif %}
{% if row.circle_services %}
{% set c = row.circle_services[0] %}
Circle {{ c.depart }} → KX {{ c.arrive_kx }} · £{{ "%.2f"|format(c.fare) }} {% if row.circle_services | length > 1 %} {% set c2 = row.circle_services[1] %} next {{ c2.depart }} → KX {{ c2.arrive_kx }} · £{{ "%.2f"|format(c2.fare) }} {% endif %} {% endif %} |
{{ row.depart_st_pancras }} → {{ row.arrive_destination }} (CET)
{% if row.eurostar_duration or row.train_number %}
{%- if row.eurostar_duration %}({{ row.eurostar_duration }}){% endif %} {%- if row.eurostar_duration and row.train_number %} · {% endif %} {%- if row.train_number %}{{ row.train_number }}{% endif %} {% endif %} {% if row.eurostar_price is not none %}£{{ "%.2f"|format(row.eurostar_price) }}{% endif %} {% if row.eurostar_plus_price is not none %}£{{ "%.2f"|format(row.eurostar_plus_price) }}{% endif %} |
{% endif %}
{% if row.total_minutes <= best_mins + 5 and trip_rows | length > 1 %}
{{ row.total_duration }} ⚡
{% elif row.total_minutes >= worst_mins - 5 and trip_rows | length > 1 %}
{{ row.total_duration }} 🐢
{% else %}
{{ row.total_duration }}
{% endif %}
|
{% else %}
Too early | — |
{% if section.direction == 'inbound' %}
{{ row.depart_destination }} → {{ row.arrive_st_pancras }}
{% if row.train_number %} {{ row.train_number }}{% endif %} {% else %} {{ row.depart_st_pancras }} → {{ row.arrive_destination }} {% if row.train_number %} {{ row.train_number }}{% endif %} {% endif %} |
No connection | {% endif %}
No valid journeys found.
{% if section.gwr_count == 0 and section.eurostar_count == 0 %} Could not retrieve train data. Check your network connection or try again. {% elif section.gwr_count == 0 %} No National Rail trains found for this date. {% elif section.eurostar_count == 0 %} No Eurostar services found for {{ destination }} on this date. {% else %} No National Rail + Eurostar combination has a {{ section.min_connection }}-{{ section.max_connection }} minute connection. {% endif %}
Connection windows: {% for section in sections %} {% if section.direction == 'inbound' %}return{% else %}outbound{% endif %} {{ section.min_connection }}–{{ section.max_connection }} min{% if not loop.last %}; {% endif %} {% endfor %}. National Rail prices from gwr.com. Eurostar prices are for 1 adult in GBP; return searches use Eurostar return-search prices. Always check eurostar.com to book. · {{ departure_station_name }} on RTT · Paddington on RTT
{% endif %} {% endblock %}