s_skaidocsTài liệu
LINGO REFERENCE

abort 404

Dừng render ngay khi không tìm thấy nội dung. Runtime giữ URL hiện tại, trả HTTP 404 và hiển thị template lỗi của theme.

Có sẵn · Lingo core & Theme runtime

Cách dùng với entries

pages/post/[slug].html
{% extends "layouts/main.html" %}
{% block content %}
  {% set article = entries.find(type="post", slug=slug) %}
  {% if not article %}
    {% abort 404 %}
  {% endif %}

  {% doc title=article.title description=article.excerpt %}
  <h1>{{ article.title }}</h1>
{% endblock %}

Folio đã áp dụng cách này cho trang bài viết. Không cần tự viết nhánh else dựng trang lỗi; khi abort xảy ra, các câu lệnh phía sau không chạy.

Kết quả của abort

  • Dừng toàn bộ lần render, kể cả khi tag nằm trong include, push hoặc section.
  • Bỏ HTML dở dang, metadata doc và nội dung stack của trang đang lỗi.
  • Render errors/404.html với doc và stack mới; giữ context website, ngôn ngữ và URL request.
  • Trả HTTP 404, không gửi redirect sang /404; buộc noindex và bỏ canonical.
  • Nếu template lỗi không tồn tại, render lỗi hoặc tự abort, trả trang 404 tối giản. Không lặp render vô hạn.

Cú pháp và phạm vi

Hiện chỉ hỗ trợ {% abort 404 %}, không có thẻ đóng. Status phải là số 404 viết trực tiếp, không dùng chuỗi, biến, mã 200 hay redirect.

Trong page có extends, đặt abort và điều kiện trong block được render, hoặc trong include/push được thực thi. Khác với doc và push, abort đặt trực tiếp ngoài block của template con không tự chạy.

Khi dùng thư viện Lingo độc lập, tag trả lingo.AbortError; ứng dụng gọi engine chịu trách nhiệm xử lý HTTP. Runtime website Skai đã xử lý trang lỗi theo quy tắc trên.