Django-fr

Forum

#1 05-04-2007 06:45:42

Nicolas Steinmetz
Membre
Inscription : 11-08-2010
Messages : 96

Problème de liste

Hello,

Je continue toujours dans mes listes.

J'avais le code suivant :

def person_list(request):
    personlist = Person.objects.all()
    feed_contents = []
    for person in personlist:
        myfeed = feedparser.parse(person.syndication)
        i = 0
        while i < 10:
            feed_link = myfeed.entries[i].link
            feed_title = myfeed.entries[i].title
            feed_contents.append([feed_link, feed_title])
            i = i + 1
    return object_list(request, queryset=personlist,
template_name='home/person_list.html', allow_empty = 'True',
extra_context={'feed_contents': feed_contents, })


qui fonctionne bien à ceci près que feed_contents aggrege l'ensemble des
contenus des flux et du coup, je suis pas capable de restituer le contenu
par flux.

Je me suis donc dit : "qu'à cela ne tienne, on va faire une liste un niveau
au dessus" pour avoir une liste par flux parsé, et chaque liste qui
contiendra elle-même une liste contenant ses flux.

J'ai donc fait (ajout de la liste pipo) :

def person_list(request):
    personlist = Person.objects.all()
    pipo = []
    for person in personlist:
        feed = feedparser.parse(person.syndication)
        i = 0
        feed_contents = []
        while i < 10:
            feed_link = feed.entries[i].link
            feed_title = feed.entries[i].title
            feed_contents.append([feed_link, feed_title],)
            i = i + 1
        pipo.append([feed_contents])
    return object_list(request, queryset=personlist,
template_name='home/person_list.html', allow_empty = 'True',
extra_context={'feed_contents': feed_contents, 'pipo': pipo })

et dans mon template, je suis passé de :

                {% for feed_content in feed_contents %}
                    {% comment %} feed_content is a list with numeral index. "0" is
URL and "1" is title {% endcomment %}
                    <li><a href="{{ feed_content.0 }}">{{ feed_content.1 }}</a></li>
                {% endfor %}

à :

                {% for pipe in pipo %}
                    {% for pipa in pipe %}
                        {% for feed_content in pipa %}
                            {% comment %} feed_content is a list with
numeral index. "0" is URL and "1" is title {% endcomment %}
                            <li><a href="{{ feed_content.0 }}">{{
feed_content.1 }}</a></li>
                        {% endfor %}
                    {% endfor %}
                {% endfor %}

mais j'obtiens le même résultat et là, je comprends pas où ça coince. Ma
dernière hypothèse serait que la liste pipo n'est pas une nouvelle liste
mais une simple copie de feed_contents, mais c'est de la pure supposition...

Vous en pensez quoi ?

Merci d'avance,
Nico

Hors ligne

#2 05-04-2007 08:57:46

Nicolas Steinmetz
Membre
Inscription : 11-08-2010
Messages : 96

Re : Problème de liste

Bon, en fait, j'ai réglé ça dans le train. A priori, au niveau template,
c'est les vues génériques qui m'ont mis dans la mouise (ou que j'ai pas su
maniupuler correctement).

Du coup, pour la vue, ça donne ceci :
<
http://chaudron.unelectronlibre.info/browser/sites/lessteinmetz/www/home/views.py
>
et pour le template :
<
http://chaudron.unelectronlibre.info/browser/sites/lessteinmetz/www/templates/home/homepage.html
>

Si malgré tout qqn veut voir pour rendre ça "plus propre", je suis preneur
d'améliorations :-)

Le 05/04/07, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com> a écrit :
>
> Hello,
>
> Je continue toujours dans mes listes.
>
> J'avais le code suivant :
>
> def person_list(request):
>     personlist = Person.objects.all()
>     feed_contents = []
>     for person in personlist:
>
>         myfeed = feedparser.parse(person.syndication)
>         i = 0
>         while i < 10:
>             feed_link = myfeed.entries[i].link
>             feed_title = myfeed.entries[i].title
>             feed_contents.append([feed_link, feed_title])
>
>             i = i + 1
>     return object_list(request, queryset=personlist, template_name='home/person_list.html', allow_empty = 'True', extra_context={'feed_contents': feed_contents, })
>
>
> qui fonctionne bien à ceci près que feed_contents aggrege l'ensemble des
> contenus des flux et du coup, je suis pas capable de restituer le contenu
> par flux.
>
> Je me suis donc dit : "qu'à cela ne tienne, on va faire une liste un
> niveau au dessus" pour avoir une liste par flux parsé, et chaque liste qui
> contiendra elle-même une liste contenant ses flux.
>
> J'ai donc fait (ajout de la liste pipo) :
>
> def person_list(request):
>     personlist = Person.objects.all()
>     pipo = []
>     for person in personlist:
>         feed = feedparser.parse(person.syndication )
>         i = 0
>         feed_contents = []
>         while i < 10:
>             feed_link = feed.entries[i].link
>             feed_title = feed.entries[i].title
>             feed_contents.append([feed_link, feed_title],)
>             i = i + 1
>         pipo.append([feed_contents])
>     return object_list(request, queryset=personlist,
> template_name='home/person_list.html', allow_empty = 'True',
> extra_context={'feed_contents': feed_contents, 'pipo': pipo })
>
> et dans mon template, je suis passé de :
>
>                 {% for feed_content in feed_contents %}
>                     {% comment %} feed_content is a list with numeral index. "0" is URL and "1" is title {% endcomment %}
>
>                     <li><a href="{{ feed_content.0 }}">{{ feed_content.1 }}</a></li>
>                 {% endfor %}
>
> à :
>
>                 {% for pipe in pipo %}
>                     {% for pipa in pipe %}
>                         {% for feed_content in pipa %}
>                             {% comment %} feed_content is a list with
> numeral index. "0" is URL and "1" is title {% endcomment %}
>                             <li><a href="{{ feed_content.0 }}">{{
> feed_content.1 }}</a></li>
>                         {% endfor %}
>                     {% endfor %}
>                 {% endfor %}
>
> mais j'obtiens le même résultat et là, je comprends pas où ça coince. Ma
> dernière hypothèse serait que la liste pipo n'est pas une nouvelle liste
> mais une simple copie de feed_contents, mais c'est de la pure supposition...
>
>
> Vous en pensez quoi ?
>
> Merci d'avance,
> Nico
>
>

Hors ligne

#3 05-04-2007 10:47:42

David Larlet
Membre
Inscription : 11-08-2010
Messages : 102

Re : Problème de liste

Le 05/04/07, Nicolas Steinmetz<nsteinmetz _AT_ clever-age.com> a écrit :
> Bon, en fait, j'ai réglé ça dans le train. A priori, au niveau template,
> c'est les vues génériques qui m'ont mis dans la mouise (ou que j'ai pas su
> maniupuler correctement).
>
> Du coup, pour la vue, ça donne ceci :
> <http://chaudron.unelectronlibre.info/browser/sites/lessteinmetz/www/home/views.py>
> et pour le template :
> <
> http://chaudron.unelectronlibre.info/browser/sites/lessteinmetz/www/templates/home/homepage.html>
>
> Si malgré tout qqn veut voir pour rendre ça "plus propre", je suis preneur
> d'améliorations :-)

Ouch, ouch, ouch le while :-)

feed_content = [(entry.link, entry.title) for entry in feed.entries[:10]]

Ça devrait passer.

Bonne journée,
David

Hors ligne

#4 05-04-2007 10:51:57

Nicolas Steinmetz
Membre
Inscription : 11-08-2010
Messages : 96

Re : Problème de liste

Le 05/04/07, David Larlet <larlet _AT_ gmail.com> a écrit :
>
>
> Ouch, ouch, ouch le while :-)


Surtout que si y a moins de 10 entrées, Django remonte une jolie erreur :-)

feed_content = [(entry.link, entry.title) for entry in feed.entries[:10]]


Je regarde ça ce soir dans le RER :-D

++
Nico

Hors ligne

Pied de page des forums