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 :

Flux RSS & Paramètres dans l'URL


Sujet :

Django Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut Flux RSS & Paramètres dans l'URL
    Bonjour,

    Je suis en train de faire une application utilisation OpenLayer pour l'ajout de POI en rapport avec l'écologie.
    Je souhaite rajouter des flux RSS pour que les utilisateurs puissent suivre l'ajout de nouveaux POI par catégories, sous-catégories de POI et zones.
    Pour les deux premièrs flux, ça fonctione. Pour les zones, je passe les latitudes et longitudes des coins haut gauche et bas droite dans l'URL qui a donc la forme suivante :

    La redirection est faite comme suivant dans view.py :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      feeds_link = '/' + settings.EXTRA_URL + 'rss/area/' + request.POST['upper_left_lat'] + ',' + request.POST['upper_left_lon'] + ',' + request.POST['lower_right_lon'] + ',' + request.POST['lower_right_lon']
                return HttpResponseRedirect(feeds_link)
    La classe correspondante du fichier rss.py

    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
    class LatestPOIsByZone(Feed):
     
    	title_template = "rss_title.html"
        	description_template = "rss_descr.html"
     
            def get_object(self, bits):
                    if len(bits) != 1:
                            raise ObjectDoesNotExist
    		string = str(bits[0]).split(',')
                    #upper = Point((string[0], string[1]))
    		#lower = Point((string[2], string[3]))
    		#upper = Point((0, 1))
    		#lower = Point((2, 3))
    		a = bits[0]
    		#upper_lat = float(bits[0])
    		#upper_lon = float(bits[1])
    		#lower_lat = float(bits[2])
    		#lower_lon = float(bits[3])
                    #return Area.objects.get(upper_left_corner__exact=upper, lower_right_corner__exact=lower)
                    return Area.objects.get(upper_left_corner__exact='POINT(' + string[0] + ' ' + string[1] + ')', lower_right_corner__exact='POINT(' + string[2] + ' ' + string[3] + ')')
    L'erreur retournée est la suivante :


    Page not found (404)
    Request Method: GET
    Request URL: http://127.0.0.1:8000/chimere/rss/ar...0115.89931797/

    Invalid feed parameters. Slug u'area' is valid, but other parameters, or lack thereof, are not.

    Quelqu'un a une idée?

  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
    Bonjours CodeCRC,

    Un peu délicat comme problème (surtout que je n’ai jamais utilisé la partie RSS de django ).

    Cependant, il me semble que le problème pourrait provenir de la règle d’URL capturant l’URL redirigée (celle sous forme http://…/rss/area/coorD1_coord2_coord3_coord4), qui semble ne pas fournir la dernière partie (les coordonnées) à ta fonction LatestPOIsByZone.get_object() (si j’ai bien compris comment ça fonctionne !)

    Donc, ce serait bien d’avoir cette partie du fichier urls.py (ou équivalent).
    Ainsi que le backtrace complet de l’erreur…

    Bastien.

    PS: Je ne vois pas l’intérêt de rediriger une url juste pour remplacer des virgules par des “underscores” ??? split() ferait aussi bien le travail avec des virgules !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut
    Merci pour ta réponse mont29 ,

    Pour précision, je sépare mes coordonnées par des virgules (le split était faux et résultait d'un test précédent), j'ai édité le code.

    En effet, la fonction LatestPOIsByZone.get_object() ne semble pas pouvoir traiter les paramètres.

    Je te fourni mon fichier URL.py (condensé à la partie intéressante) :

    URL.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    urlpatterns = patterns('',
        (r'^' + EXTRA_URL + r'admin/(.*)', admin.site.root),
        (r'^' + EXTRA_URL + r'$', 'chimere.main.views.index'),
        (r'^' + EXTRA_URL + r'edit/$', 'chimere.main.views.edit'),
        (r'^' + EXTRA_URL + r'edit_route/$', 'chimere.main.views.editRoute'),
     
        #Include url python file containing the rss URLs (to be merged)
        (r'^' + EXTRA_URL, include('chimere.main.rssUrls')),
     
    )
    rssUrls.py
    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
     
    from django.conf.urls.defaults import *
    from chimere.main.rss import LatestPOIsByCategory, LatestPOIsBySubCategory, LatestPOIs, LatestPOIsByZone
     
    feeds = {
        'category': LatestPOIsByCategory,
        'subcategory': LatestPOIsBySubCategory,
        'global': LatestPOIs,
        'area': LatestPOIsByZone,
    }
     
    urlpatterns = patterns('',
        (r'rss/$', 'chimere.main.views.rss'),
        (r'rss/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': feeds}),
    )
    Il n'y a pas de backtrace plus complet, la seule chose qu'il me retourne est une belle erreur 404... :

    Page not found (404)
    Request Method: GET
    Request URL: http://127.0.0.1:8000/chimere/rss/ar...2941.90688553/

    Invalid feed parameters. Slug u'area' is valid, but other parameters, or lack thereof, are not.

    You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
    Merci de ton aide

  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
    Ok, j’en ai profité pour jeter un œil à la doc de django.

    Si on récapitule :
    *Dans les urls de feeds, la partie capturée par (?P<url>.*) est utilisée automatiquement par la partie Feed de django :
    **Le premier élément (le “slug”) est utilisé pour déterminer quelle sous-classe de Feed utiliser ;
    **Le reste est passé à get_object(), chaque morceau restant de l’URL formant un élément de la liste “bits” passée en paramètre.

    Donc, première question (à vérifier avec un simple “print(bits)” au début de get_object() ) : qu’est ce qui est réellement passé à cette fonction ?

    Il semblerait que rien ne lui soit passé (bits vide), ce qui entraînerait l’exécution de “raise ObjectDoesNotExist”. Si c’est le cas, il se peut que les virgules perturbent django.feed (après tout, je ne suis pas sûr qu’elles soient acceptées dans une URL – du moins sous leur forme “littérale”…)

    Donc, essaye déjà (si ce n’est déjà fait) le petit print, pour voir ce qui est passé à get_object() !

    Bastien

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut
    Huuum j'ai une question con que j'ai jamais osé poser ...

    Je suis débutant sous Django et j'arrive pas à trouver le moyen de débugger efficacement. Je ne sais donc pas comment utiliser les 'print' pour le debug (redirection dans un fichier..?).

    Comment puis-je faire pour débugger alors?

    Merci d'avance

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 116
    Par défaut
    Citation Envoyé par CodeCRC Voir le message
    Huuum j'ai une question con que j'ai jamais osé poser ...

    Je suis débutant sous Django et j'arrive pas à trouver le moyen de débugger efficacement. Je ne sais donc pas comment utiliser les 'print' pour le debug (redirection dans un fichier..?).

    Comment puis-je faire pour débugger alors?

    Merci d'avance
    Déjà tu as la page de debug qui est très détaillée.
    Ensuite tu as le python manage.py shell pour la ligne de commande en direct
    Et enfin, t'as des applis de log comme django logging qui sont très bien faite http://code.google.com/p/django-logging/

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut
    Merci de ta réponse

    La page de debug ? Celle qui apparait lorsqu'il y a une erreur? J'aimerais pouvoir visualiser l'état de mes variables en permanence plutot.

    J'ai installé django-logging. Ca marche pour toutes les pages de mon site....sauf pour celle retournée pour les flux RSS....

  8. #8
    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 Debug et print…
    CodeCRC, pour le print :

    * d’une part, si tu utilise le serveur de développement de django (celui lancé par “manage.py runserver” depuis une console, une fois dans le dossier de ton projet…), tous les print devraient être affichés dans cette même console !

    * d’autre part, pour rediriger un print (et tous les autres messages standard/d’erreur) vers un fichier, fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import sys
     
    f_std = open("path/to/file", "a+")
    sys.stderr = sys.stdout = f_std
    …et en fermant correctement l’objet fichier quand tu n’en as plus besoin (f_std.close()) !

    Enfin, normalement, si tu mets DEBUG à True dans ton fichier de config, Django offre une très utile et puissante page (vue) détaillant l’erreur, la pile des appels, les valeurs des variables, …

    A+

    Bastien

Discussions similaires

  1. passage de paramètre dans une url
    Par samira84 dans le forum Struts 1
    Réponses: 5
    Dernier message: 12/06/2007, 15h52
  2. erreur de passage de paramètre dans une urL
    Par lodan dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/02/2007, 12h29
  3. [WebForms]Récupération d'un paramètre dans l'URL
    Par Kylen dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 07/06/2006, 13h22
  4. [JpGraph] Passage d'un tableau en paramètre dans une URL pour JPgraph
    Par crazydiver_e2 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 16/01/2006, 16h15
  5. récupérer les paramètres dans une url
    Par asetti dans le forum ASP
    Réponses: 6
    Dernier message: 23/12/2005, 10h08

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