Files
NightSpire/home/templates/partials/noticias.html
T
Inna 98c3cbdbc6 Fase 0/1 migración a TSX: islas React con Vite + API JSON (piloto: noticias)
Arquitectura elegida: islas React/TSX montadas sobre las plantillas Django
existentes (django-vite), alimentadas por endpoints JSON bajo /api/. El backend,
las URLs y la auth por sesión se mantienen; se migra sección a sección.

Fase 0 (tooling):
- frontend/ con Vite + React 18 + TypeScript. Build a static/dist con manifest.
- django-vite 3.1 en INSTALLED_APPS + DJANGO_VITE (dev_mode=DEBUG,
  static_url_prefix='dist'). STATIC_URL pasa a '/static/' (absoluto) para que los
  assets no choquen con el <base href> de la plantilla. WhiteNoise sirve el bundle.
- .gitignore: frontend/node_modules y static/dist (artefactos de build).

Fase 1 (piloto: lista de noticias de la portada):
- API: home/views/api.py -> home_news_api (JsonResponse); ruta /api/home/news/
  montada en home/api_urls.py fuera de i18n_patterns.
- React: NewsList.tsx hace fetch de la API y renderiza las noticias (mismas clases
  CSS que el HTML original). Entry src/entries/home.tsx monta en #home-news-app.
- partials/noticias.html: el bucle {% for noticia %} se reemplaza por el contenedor
  de montaje + {% vite_asset %}.

Verificado en producción: manage.py check OK, /api/home/news/ 200, la home incluye
el mount y el <script> del bundle, y el bundle se sirve (200).

Build en deploy: cd frontend && npm run build && collectstatic (ver frontend/README.md).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 20:18:35 +00:00

74 lines
3.9 KiB
HTML

{% load django_vite %}
<!-- main -->
<div class="main-page">
<div class="middle-content middle-content-index">
<div class="body-content">
<div class="title-content"><h1>{{ NOMBRE_SERVIDOR }} WOTLK 3.3.5A</h1></div>
<div class="box-content">
<div class="raf-index-holder">
<div class="right-content" id="right-content-min">
<div class="right-body">
<table class="max-center-table">
<tr>
<td class="yellow-info">{{ server.name }} <span class="blue-info small-font">{{ expansion }}<span></td>
<td class="real-info-box green-info">{{ online_characters }}</td>
</tr>
<tr>
<td>Login</td>
<td class="real-info-box {% if status == 'Online' %}green-info{% else %}red-info{% endif %}">{{ status }}</td>
</tr>
<tr>
<td>Hora</td>
<td class="real-info-box"><span id="server-time">{{ server_time }}</span></td>
</tr>
<tr>
<td colspan="2"><hr /></td>
</tr>
<tr class="centered">
<td colspan="2">
<p><span>{{ server.address }}</span></p>
</td>
</tr>
</table>
</div>
<div class="raf-index-responsive"><a href="recruit-a-friend">¡RECLUTA A UN AMIGO!</a></div>
</div>
<div class="raf-index"><a href="recruit-a-friend">¡RECLUTA A UN AMIGO!</a></div>
</div>
<div class="body-box-content">
<div class="body-box-content">
<p>{{ NOMBRE_SERVIDOR }} es una comunidad enfocada en usuarios de habla hispana, especialmente dirigida al público español y latino.</p>
<p>Atraemos a usuarios apasionados tanto por el PvE como por el PvP, y ofrecemos una amplia variedad de contenido.</p>
<br />
<p>Nuestro objetivo principal es mantener una comunidad de alto nivel, brindando un ambiente agradable para que todos los miembros, nuevos y veteranos, encuentren aquí un lugar donde puedan vivir momentos inigualables.</p>
<p>¡Únete y disfruta de una experiencia única con miles de usuarios!</p>
</div>
</div>
</div>
<br />
<script>
if ($("#live-stream").length > 0) {
$("#content-container").html("EN VIVO" );
$("#live-stream-div").show();
}
else {
$("#live-stream-div").hide();
}
</script>
<div class="title-content-h3">
<h3 class="big-font">NOTICIAS</h3>
</div>
<div class="box-content">
<div class="body-box-content">
<!-- Isla React (Vite): la lista de noticias se renderiza en TSX y se
alimenta del endpoint /api/home/news/. Migrado desde el bucle Django. -->
<div id="home-news-app"></div>
{% vite_asset 'src/entries/home.tsx' %}
</div>
</div>