IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Problème avec les accents


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut Problème avec les accents
    Bonjour à tous,

    Je me tourne vers vous car j'ai un problème depuis un moment et malgré mes recherches et mes essais je n'ai pas réussi à corriger.

    C'est tout simple en fait, si je mets un accent dans un template (donc un fichier HTML), Django me renvoi une erreur au niveau de la fonction get_template.

    Une démonstration valant mieux que de longues explications:

    Voici mon fichier views.py (pour ma page d'accueil)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    from django.shortcuts import render_to_response
    from django.template import RequestContext
    from ????.news.views import *
    
    def indexpage(request,parameters):
    	
    	# Define the maximum number of news per page
    	news_per_page = 5
    	
    	# Extract page parameters
    	param_data = extractParameters(parameters)
    	
    	# Get news according to user permissions and page parameters
    	news_list = getNewsByType(request.user,param_data)
    	
    	# Define menus
    	menu_data = []
    	for news_temp in news_list:
    		menu_data.append({'title':news_temp['type'],'abrev':news_temp['type'][0:4].lower(),'data':news_temp['data'][0:5]})
    	
    	# List all news to display
    	news_list = getAllNews(request.user,param_data)
    	
    	# Keep only news to display
    	news_data = news_list[((param_data['page']-1)*news_per_page):((param_data['page']*news_per_page)-1)]
    	
    	# Display index page
    	return render_to_response('index.html', {'menu_data':menu_data, 'news_data':news_data, 'parameters':param_data}, context_instance=RequestContext(request))
    Le template index.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    {% extends "base.html" %}
     
    {% block title %}{{ block.super }} - Accueil{% endblock %}
     
    {% block page_menu %}
    {% for menu in menu_data %}<div id="group">
    <h3>{{menu.title}}</h3>
    <ul>
    {% ifequal parameters.type menu.abrev %}
    {% for data in menu.data %}
    {% ifequal parameters.id data.id %}<li class="selected"><a href="/{{menu.abrev}}_{{data.id}}" class="selected">{{data.titre}}</a></li>
    {% else %}<li><a href="/{{menu.abrev}}_{{data.id}}">{{data.titre}}</a></li>{% endifequal %}
    {% endfor %}
    {% else %}{% for data in menu.data %}
    <li><a href="/{{menu.abrev}}_{{data.id}}">{{data.titre}}</a></li>
    {% endfor %}{% endifequal %}
    </ul>
    <a href="/{{menu.abrev}}_all_1" class="footer">Voir tous</a>
    </div>{% endfor %}
    {% endblock %}
     
    {% block content %}
    <ul>
    {% for news in news_data %}<li>
    <h3><a href="{{news.lien}}">{{news.titre}}</a></h3>
    <p>{{news.message|linebreaks}}</p>
    <div class="item_foot"><a>Par {% if news.auteur.first_name and news.auteur.last_name %}{{news.auteur.first_name|make_list|first|upper}}.{{news.auteur.last_name}}{% else %}{{news.auteur.username|capfirst}}{% endif %} le {{news.date}}</a></div>
    </li>{% endfor %}
    </ul>
    {% endblock %}
    Et le template base.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>{% block title %}Titre du site{% endblock %}</title>
    {% block css %}
    <link rel="stylesheet" href="/{{ media_url }}/{{ STYLE_DIR }}/{{ CURR_STYLE }}/main.css" type="text/css" media="screen" / >
    <link rel="stylesheet" href="/{{ media_url }}/{{ STYLE_DIR }}/{{ CURR_STYLE }}/nav_menu.css" type="text/css" media="screen" / >
    <link rel="stylesheet" href="/{{ media_url }}/{{ STYLE_DIR }}/{{ CURR_STYLE }}/header.css" type="text/css" media="screen" / >
    <link rel="stylesheet" href="/{{ media_url }}/{{ STYLE_DIR }}/{{ CURR_STYLE }}/formular.css" type="text/css" media="screen" / >
    <link rel="stylesheet" href="/{{ media_url }}/{{ STYLE_DIR }}/{{ CURR_STYLE }}/content.css" type="text/css" media="screen" / >
    <link rel="stylesheet" href="/{{ media_url }}/{{ STYLE_DIR }}/{{ CURR_STYLE }}/page_menu.css" type="text/css" media="screen" / >
    <link rel="stylesheet" href="/{{ media_url }}/{{ STYLE_DIR }}/{{ CURR_STYLE }}/pubs.css" type="text/css" media="screen" / >
    {% endblock %}
    </head>
     
    <body>
    <!-- Block : Header -->
    <div id="header">
    {% block header %}{% endblock %}
    <!-- Block : Members --><!-- Block end -->
    </div>
    <!-- Block end -->
     
    <!-- Block : Navigation -->
    <!-- Block end -->
     
    <!-- Block : Page menu -->
    <div id="page_menu">
    {% block page_menu %}{% endblock %}
    </div>
    <!-- Block end -->
     
    <!-- Block : Data -->
    <div id="content">
    {% block content %}{% endblock %}
    </div>
    <!-- Block end -->
     
    <!-- Block : Pubs -->
    <div id="pubs">
    {% block pubs %}{% endblock %}
    </div>
    <!-- Block end -->
     
    <!-- Block : Footer -->
    <div id="footer">
    {% block footer %}{% endblock %}
    </div>
    <!-- Block end -->
    </body>
    </html>
    Bon c'est un peu long , en l'état ca fonctionne mais si je rajoute un accent dans l'un des templates c'est le drame...

    Un extrait de l'erreur obtenue (j'ai surligné en rouge la ligne qui pose problème dans le fichier views.py):
    TemplateSyntaxError at /
    Caught an exception while rendering: ('utf8', '<!DOCTYPE ...
    Pour compléter, je travaille actuellement sur le serveur local de développement, je suis sur Ubuntu 9.04

    Merci d'avance de votre aide,

    @+
    Duf

  2. #2
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut Encodage du template ?
    Bizarre…

    À tout hasard, le fichier index.html (et/ou base.html) est bien enregistré en utf8 ? Parce que s’il est en isoxxx, ’y a de fortes chances que l’erreur vienne de là!

    Sinon, avoir tout le message d’erreur pourrait être utile…

    Tant qu’on y est, y a-t-il une erreur quelque soit l’emplacement de l’accent dans le template ? C-à-d, qu’il soit dans une “instruction django”, une balise xhtml, ou du texte “simple” ?

    Bastien

  3. #3
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Merci de te pencher sur mon problème

    Citation Envoyé par mont29 Voir le message
    À tout hasard, le fichier index.html (et/ou base.html) est bien enregistré en utf8 ? Parce que s’il est en isoxxx, ’y a de fortes chances que l’erreur vienne de là!
    Je suis pas sûr à 100% mais d'après les vérifs que j'ai pu faire, le fichier m'a bien l'air encodé en utf-8 (il semblerait que se soit les paramètres par défaut)

    Citation Envoyé par mont29 Voir le message
    Sinon, avoir tout le message d’erreur pourrait être utile…
    Oui, désolé , je le mettrais tout à l'heure

    Citation Envoyé par mont29 Voir le message
    Tant qu’on y est, y a-t-il une erreur quelque soit l’emplacement de l’accent dans le template ? C-à-d, qu’il soit dans une “instruction django”, une balise xhtml, ou du texte “simple” ?
    En fait je n'ai pas testé partout , je l'ai juste testé comme du texte simple, j'essayerais çà ce soir...

    Merci,
    Duf

  4. #4
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Re-bonjours,

    Juste pour rappeler que si le problème ne se pose que dans dans une partie “html”, tu peux facilement remplacer les caractère spéciaux par leurs entités xhtml (par ex. “&eacute;” pour “é”)… Comme ça, pas de problème d’encodage, on reste à de l’ASCII pur (même si c’est un peu moins lisible).

    À propos d’encodage: sous GNU/Linux, il y a en effet de fortes chances que l’utf8 soit celui par défaut – par contre, sous windoze, il me semble que ce sont des codes “spécial Microsoft™” qui sont utilisés par défaut (mais ça dépend des éditeurs de texte…).

    A+
    Bastien

  5. #5
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Salut,

    J'ai finalement réussi à résoudre mon problème (cette partie du moins), il venait en fait des MIDDLEWARES que j'utilisais pour ajouter des données après la construction des vues. J'utilisais des expressions régulières et le problème se situait à se niveau.

    J'ai réglé ca simplement en précisant le charset à ce niveau.

    Merci à tous
    Duf

  6. #6
    Membre confirmé
    Profil pro
    Développeur Back-End
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut Proposition
    Salut
    essaye ça:

    FILE_CHARSET='cp1252'

    dans ton fichier settings.py

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. XMLHTTP, problèmes avec les accents
    Par Berliozz dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2006, 11h32
  2. AJAX : Problème avec les accents...
    Par @drien dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/01/2006, 14h33
  3. Petit problème avec les accents circonflexes...
    Par Harvester dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 29/11/2005, 18h44
  4. [HTML][Encodage] Problèmes avec les accents...
    Par eraim dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/05/2004, 10h11
  5. [JDBC] Problème avec les accents
    Par seawolfm dans le forum Administration
    Réponses: 2
    Dernier message: 29/01/2004, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo