{% 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 %}

{% if journey_type == 'inbound' %} {{ destination }} → {{ departure_station_name }} {% elif journey_type == 'return' %} {{ departure_station_name }} ↔ {{ destination }} {% else %} {{ departure_station_name }} → {{ destination }} {% endif %}

← Prev {{ travel_date_display }}{% if return_date_display %} to {{ return_date_display }}{% endif %} Next →
{% for destination_slug, destination_name, destination_url in destination_links %} {% if destination_slug == slug %} {{ destination_name }} {% else %} {{ destination_name }} {% endif %} {% endfor %}
NR ticket: Load advance prices
Eurostar:

{{ gwr_count }} National Rail service{{ 's' if gwr_count != 1 }}  ·  {{ eurostar_count }} Eurostar service{{ 's' if eurostar_count != 1 }} {% if from_cache %}  ·  (cached) {% endif %} {% if provisional_timetable %}  ·  checking exact timetable {% endif %}

{% if error %}
Warning: {{ error }}
{% endif %} {% if no_prices_note %}
{{ no_prices_note }}
{% endif %}
{% if sections %} {% for section in sections %}

{% if section.direction == 'inbound' %} Return: {{ destination }} → {{ departure_station_name }} {% else %} Outbound: {{ departure_station_name }} → {{ destination }} {% endif %}

{{ section.date_display }}

{% if section.rows %} {% if section.direction == 'inbound' %} {% else %} {% endif %} {% set trip_rows = section.rows | selectattr('row_type', 'equalto', 'trip') | list %} {% if trip_rows %} {% set best_mins = trip_rows | map(attribute='total_minutes') | min %} {% set worst_mins = trip_rows | map(attribute='total_minutes') | max %} {% endif %} {% for row in section.rows %} {% if row.row_type == 'trip' and row.total_minutes <= best_mins + 5 and trip_rows | length > 1 %} {% set row_class = 'row-fast' %} {% elif row.row_type == 'trip' and row.total_minutes >= worst_mins - 5 and trip_rows | length > 1 %} {% set row_class = 'row-slow' %} {% elif row.row_type == 'unreachable' %} {% set row_class = 'row-unreachable' %} {% elif loop.index is odd %} {% set row_class = 'row-alt' %} {% else %} {% set row_class = '' %} {% endif %} {% if row.row_type == 'trip' %} {% if section.direction == 'inbound' %} {% else %} {% endif %} {% else %} {% endif %} {% endfor %}
Eurostar
{{ destination }} → St Pancras
Transfer
St Pancras → Paddington
National Rail
Paddington → {{ departure_station_name }}
National Rail
{{ departure_station_name }} → Paddington
Transfer
Paddington → St Pancras
Eurostar
St Pancras → {{ destination }}
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 %} {% set c = row.circle_services[0] %}
Circle {{ c.depart }} → PAD {{ c.arrive_pad }} · £{{ "%.2f"|format(c.fare) }} {% if row.circle_services | length > 1 %} {% set c2 = row.circle_services[1] %}
next {{ c2.depart }} → PAD {{ c2.arrive_pad }} · £{{ "%.2f"|format(c2.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 %}
{{ 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 %}
{% 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 %}
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
{% else %}

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 %}

{% endif %}
{% endfor %}

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 %}