admin_edit.html

← Back to explorer
templates/admin_edit.html
{% extends "base.html" %}

{% block title %}{{ 'Edit post' if post else 'New post' }}{% endblock %}

{% block head %}
  <link rel="stylesheet" href="{{ url_for('static', filename='css/admin_page.css') }}">
{% endblock %}

{% block content %}
  <div class="admin-wrap">
    <div class="admin-top">
      <h1 class="admin-title">{{ 'Edit post' if post else 'New post' }}</h1>
      <div class="admin-row">
        <a class="btn" href="{{ url_for('admin_posts') }}">Back</a>
        {% if post and post.is_published %}
          <a class="btn" href="{{ url_for('blog_post', slug=post.slug) }}" target="_blank" rel="noopener">View</a>
        {% endif %}
      </div>
    </div>

    {% with messages = get_flashed_messages() %}
      {% if messages %}
        {% for m in messages %}
          <div class="flash">{{ m }}</div>
        {% endfor %}
      {% endif %}
    {% endwith %}

    <form class="form-grid" method="post" enctype="multipart/form-data">
      <label>Title</label>
      <input name="title" value="{{ post.title if post else '' }}" required>

      <label>Slug (optional)</label>
      <input name="slug" value="{{ post.slug if post else '' }}" placeholder="auto-from-title">

      <label>Excerpt (optional)</label>
      <input name="excerpt" value="{{ post.excerpt if post else '' }}" maxlength="240" placeholder="Short summary shown on the blog list">

      <label>Tags (optional)</label>
      <input name="tags" value="{{ (post.tags|join(', ')) if post and post.tags else '' }}" placeholder="e.g. Python, Flask, Systems">

      <label>Cover image (optional)</label>
      {% if post and post.cover_image %}
        <div class="admin-thumb-row">
          <img class="admin-thumb" src="{{ url_for('static', filename='uploads/' + post.cover_image) }}" alt="Cover">
          <label class="admin-inline"><input type="checkbox" name="remove_cover"> Remove cover</label>
        </div>
      {% endif %}
      <input type="file" name="cover_image" accept="image/*">

      <label>Post images (optional)</label>
      {% if post and post.images and post.images|length > 0 %}
        <div class="admin-gallery">
          {% for im in post.images %}
            <img class="admin-thumb" src="{{ url_for('static', filename='uploads/' + im) }}" alt="Image {{ loop.index }}">
          {% endfor %}
        </div>
        <label class="admin-inline"><input type="checkbox" name="remove_gallery"> Remove all gallery images</label>
      {% endif %}
      <input type="file" name="post_images" accept="image/*" multiple>

      <div class="admin-row">
        <label style="display:flex; gap:10px; align-items:center; margin:0;">
          <input type="checkbox" name="is_published" {% if post and post.is_published %}checked{% endif %}>
          Published
        </label>
      </div>

      <label>Content (Markdown)</label>
      <textarea name="content_md" required>{{ post.content_md if post else '' }}</textarea>

      <div class="admin-row">
        <button class="btn" type="submit">Save</button>
        <span class="page-desc" style="margin:0; font-size:13px;">Markdown supported. Code fences and tables are enabled.</span>
      </div>
    </form>
  </div>
{% endblock %}