CORRECTION_ERREUR_TEMPLATE.md 4.3 KB

Correction de l'erreur TemplateSyntaxError

🐛 Problème identifié

Erreur : Could not parse the remainder: ':width' from 'page.seo.og.image:width'

Cause : Django ne permet pas d'utiliser le caractère : dans les noms de variables des templates. Les clés de dictionnaire avec : (comme image:width, article:published_time) ne peuvent pas être accessibles via la syntaxe {{ dict.key:subkey }}.

✅ Fichiers corrigés

1. /blog/templates/read.html

Lignes modifiées : 26-41

Avant :

<meta property="og:image:width" content="{{ page.seo.og.image:width }}">
<meta property="og:image:height" content="{{ page.seo.og.image:height }}">
<meta property="article:published_time" content="{{ page.seo.og.article:published_time }}">
<meta property="article:modified_time" content="{{ page.seo.og.article:modified_time }}">
<meta property="article:author" content="{{ page.seo.og.article:author }}">
<meta property="article:section" content="{{ page.seo.og.article:section }}">

Après :

<meta property="og:image:width" content="{{ page.seo.og.image_width }}">
<meta property="og:image:height" content="{{ page.seo.og.image_height }}">
<meta property="article:published_time" content="{{ page.seo.og.article_published_time }}">
<meta property="article:modified_time" content="{{ page.seo.og.article_modified_time }}">
<meta property="article:author" content="{{ page.seo.og.article_author }}">
<meta property="article:section" content="{{ page.seo.og.article_section }}">

2. /blog/templates/blog/seo_meta.html

Lignes modifiées : 28-40

Avant :

{% if seo.og.article:published_time %}
<meta property="article:published_time" content="{{ seo.og.article:published_time }}">
{% endif %}
{% if seo.og.article:author %}
<meta property="article:author" content="{{ seo.og.article:author }}">
{% endif %}
{% for tag in seo.og.article:tag %}
<meta property="article:tag" content="{{ tag }}">
{% endfor %}

Après :

{% if seo.og.article_published_time %}
<meta property="article:published_time" content="{{ seo.og.article_published_time }}">
{% endif %}
{% if seo.og.article_author %}
<meta property="article:author" content="{{ seo.og.article_author }}">
{% endif %}
{% if seo.og.article_tags %}
{% for tag in seo.og.article_tags %}
<meta property="article:tag" content="{{ tag }}">
{% endfor %}
{% endif %}

3. /blog/seo_helpers.py

Lignes modifiées : 85-99, 103-110

Changements dans le dictionnaire og :

  • 'image:alt''image_alt'
  • 'image:width''image_width'
  • 'image:height''image_height'
  • 'article:published_time''article_published_time'
  • 'article:modified_time''article_modified_time'
  • 'article:author''article_author'
  • 'article:section''article_section'
  • 'article:tag''article_tags'

Changements dans le dictionnaire twitter :

  • 'image:alt''image_alt'

🎯 Solution appliquée

Au lieu d'utiliser : dans les clés de dictionnaire (qui n'est pas compatible avec la syntaxe des templates Django), nous avons remplacé par des underscores _.

Important : Les attributs HTML Open Graph utilisent toujours : (comme og:image:width), mais les variables Django utilisent maintenant _ (comme page.seo.og.image_width).

🧪 Test

Pour vérifier que tout fonctionne :

  1. Démarrer le serveur :

    cd /Users/duhaz/projets/blog-duhaz
    ./start.sh
    
  2. Visiter l'URL qui causait l'erreur :

    http://127.0.0.1:8000/blog/mise-a-jour-majeure-du-blog-design-moderne-et-nouvelles-fonctionnalites
    
  3. Vérifier dans le code source HTML que les balises Open Graph sont correctement générées :

    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="630">
    <meta property="article:published_time" content="2024-10-30T...">
    

📝 Notes pour le futur

  • Convention de nommage : Toujours utiliser des underscores _ pour les clés de dictionnaire Python qui seront utilisées dans les templates Django
  • Open Graph : Les propriétés HTML Open Graph utilisent : mais les variables Django doivent utiliser _
  • Tests : Toujours tester les templates après modification des helpers SEO

Date de correction : 2 novembre 2025 Fichiers impactés : 3 fichiers Lignes modifiées : ~30 lignes