Django-fr

Forum

#1 20-12-2006 18:10:55

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

Question

Hello,

Je bloque sur des petits trucs qui comment à me gonfler et me bloquent
inutilement, j'en appelle donc à vos lumières ô grands maitres de
python/django.

1er problème, j'ai dans mon urlconf :

(r'^post/(?P<slug>\w+)$', 'object_detail', dict(queryset= Post.objects.all()
, slug_field= 'url',extra_context={'all_tags': Tag.objects.all(),
'all_categories': Category.objects.all(), } )),

Si mon slugfield vaut billet1, ça fonctionne, ma page est affichée. Si j'ai
billet-1 ça marche plus. Une idée ? J'avoue que les regexp et moi on n'est
pas bon copain :-(

2eme question, je cherche à filtrer selon un argument avec les vues
génériques et je bloque dans la syntaxe. (et je m'y prends peut être mal)

Ex :
(r'^tag/(?P<slug>\w+)/$', 'object_list', dict(queryset=
Post.objects.filter(pk='slug_field')
, slug_field= 'url', extra_context={'all_tags': Tag.objects.all(),
'all_categories': Category.objects.all(), } )),

L'idée serait de sortir tous les posts ayant le tag correspondant à mon
slugfield.

Pour le moment, grand néophyte de python/django, j'avoue aussi y perdre mon
latin dans les tuples / listes / dictionnaires (finalement les tableaux en
php, c'était peut être pas si mal que ça :-P )

Merci d'avance pour vos lumières,
Nico

Hors ligne

#2 20-12-2006 22:24:00

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

Re : Question

2006/12/20, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com>:
> Hello,
>
> Je bloque sur des petits trucs qui comment à me gonfler et me bloquent
> inutilement, j'en appelle donc à vos lumières ô grands maitres de
> python/django.
>
> 1er problème, j'ai dans mon urlconf :
>
> (r'^post/(?P<slug>\w+)$', 'object_detail', dict(queryset= Post.objects.all()
> , slug_field= 'url',extra_context={'all_tags':
> Tag.objects.all(), 'all_categories': Category.objects.all (), } )),
>
> Si mon slugfield vaut billet1, ça fonctionne, ma page est affichée. Si j'ai
> billet-1 ça marche plus. Une idée ? J'avoue que les regexp et moi on n'est
> pas bon copain :-(

Quid de (?P<slug>[-\w]+) ?

>
> 2eme question, je cherche à filtrer selon un argument avec les vues
> génériques et je bloque dans la syntaxe. (et je m'y prends peut être mal)
>
> Ex :
> (r'^tag/(?P<slug>\w+)/$', 'object_list', dict(queryset=
> Post.objects.filter(pk='slug_field') , slug_field= 'url',
> extra_context={'all_tags': Tag.objects.all(), 'all_categories':
> Category.objects.all(), } )),
>
> L'idée serait de sortir tous les posts ayant le tag correspondant à mon
> slugfield.

Essaye avec queryset =
Tag.objects.get(slug=slug).entry_set.order_by('-pub_date')

(probablement à adapter, il faut peut-être le faire en deux fois...)

Sinon :

    (r'^tag/(?P<object_id>[A-Za-z-_]+)/$',

     'django.views.generic.list_detail.object_detail', tag_dict),


avec

tag_dict = {

    'queryset': Tag.objects.all(),

    'extra_context': { 'Post':Post },

}

>
> Pour le moment, grand néophyte de python/django, j'avoue aussi y perdre mon
> latin dans les tuples / listes / dictionnaires (finalement les tableaux en
> php, c'était peut être pas si mal que ça :-P )

Rhââââaaaa ! tongue

>
> Merci d'avance pour vos lumières,
> Nico

Bonne soirée,
David

>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/cgi-bin/mailman/listinfo/django
>
>

Hors ligne

#3 21-12-2006 15:49:43

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

Re : Question

Le Mercredi 20 Décembre 2006 22:24, David Larlet a écrit :

> Quid de (?P<slug>[-\w]+) ?

Indeed avec un petit / en fin : (r'^post/(?P<slug>[-\w]+)/$',

> Essaye avec queryset =
> Tag.objects.get(slug=slug).entry_set.order_by('-pub_date')
>
> (probablement à adapter, il faut peut-être le faire en deux fois...)

Me dit "name 'slug' is not defined" :-(

> Sinon :
>
>     (r'^tag/(?P<object_id>[A-Za-z-_]+)/$',
>      'django.views.generic.list_detail.object_detail', tag_dict),
>
> avec
>
> tag_dict = {
>     'queryset': Tag.objects.all(),
>     'extra_context': { 'Post':Post },
> }

Pour le tester, faut que j'ai une url en /tag/1bidule/ ? si le tag bidule a
pour id 1 ?

J'ai testé /tag/1 /tag/bidule /tag/1-bidule ...

Dans le cas /tag/bidule, il me dit "No tag found matching the query" alors que
pour les autres, apparemment c'est un problème de motif d'url.

Nico

Hors ligne

#4 02-01-2007 15:13:17

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

Re : Question

un petit up et j'en profite pour vous souhaiter à tous une bonne année
2007 :-)

Le Jeudi 21 Décembre 2006 15:49, Nicolas Steinmetz a écrit :
> Le Mercredi 20 Décembre 2006 22:24, David Larlet a écrit :
> > Quid de (?P<slug>[-\w]+) ?
>
> Indeed avec un petit / en fin : (r'^post/(?P<slug>[-\w]+)/$',
>
> > Essaye avec queryset =
> > Tag.objects.get(slug=slug).entry_set.order_by('-pub_date')
> >
> > (probablement à adapter, il faut peut-être le faire en deux fois...)
>
> Me dit "name 'slug' is not defined" :-(
>
> > Sinon :
> >
> >     (r'^tag/(?P<object_id>[A-Za-z-_]+)/$',
> >      'django.views.generic.list_detail.object_detail', tag_dict),
> >
> > avec
> >
> > tag_dict = {
> >     'queryset': Tag.objects.all(),
> >     'extra_context': { 'Post':Post },
> > }
>
> Pour le tester, faut que j'ai une url en /tag/1bidule/ ? si le tag bidule a
> pour id 1 ?
>
> J'ai testé /tag/1 /tag/bidule /tag/1-bidule ...
>
> Dans le cas /tag/bidule, il me dit "No tag found matching the query" alors
> que pour les autres, apparemment c'est un problème de motif d'url.
>
> Nico
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/cgi-bin/mailman/listinfo/django

Hors ligne

#5 03-01-2007 14:42:08

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

Re : Question

2007/1/2, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com>:
> un petit up et j'en profite pour vous souhaiter à tous une bonne année
> 2007 :-)

Oups c'est vrai... c'est possible que tu attaches tes fichiers pour
que je puisse voir où ça coince ?

Bonne année à tous :-)
David

Hors ligne

#6 03-01-2007 16:47:07

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

Re : Question

2007/1/3, David Larlet <larlet _AT_ gmail.com>:
>
> 2007/1/2, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com>:
> > un petit up et j'en profite pour vous souhaiter à tous une bonne année
> > 2007 :-)
>
> Oups c'est vrai... c'est possible que tu attaches tes fichiers pour
> que je puisse voir où ça coince ?


http://atomecms.unelectronlibre.info/browser/atomecms/trunk/blog/models.py
http://atomecms.unelectronlibre.info/browser/atomecms/trunk/blog/urls.py
http://atomecms.unelectronlibre.info/browser/atomecms/trunk/templates/blog

Tu devrais pouvoir faire un check out global si le coeur t'en dit (à
vérifier, j'ai pas d'accès ssh pour le moment pour vérifier)

++
Nico

Hors ligne

#7 06-01-2007 22:36:23

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

Re : Question

David, as-tu pu regardé ?

2007/1/3, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com>:
>
>
>
> 2007/1/3, David Larlet <larlet _AT_ gmail.com>:
> >
> > 2007/1/2, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com>:
> > > un petit up et j'en profite pour vous souhaiter à tous une bonne année
> > > 2007 :-)
> >
> > Oups c'est vrai... c'est possible que tu attaches tes fichiers pour
> > que je puisse voir où ça coince ?
>
>
> http://atomecms.unelectronlibre.info/browser/atomecms/trunk/blog/models.py
> http://atomecms.unelectronlibre.info/browser/atomecms/trunk/blog/urls.py
> http://atomecms.unelectronlibre.info/browser/atomecms/trunk/templates/blog
>
> Tu devrais pouvoir faire un check out global si le coeur t'en dit (à
> vérifier, j'ai pas d'accès ssh pour le moment pour vérifier)
>
> ++
> Nico
>
>

Hors ligne

#8 07-01-2007 00:46:22

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

Re : Question

2007/1/6, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com>:
> David, as-tu pu regardé ?

Trop rapidement hmm
Je vais essayer de regarder ça demain.

++
David

Hors ligne

#9 18-01-2007 09:51:16

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

Re : Question

2007/1/17, David Larlet <larlet _AT_ gmail.com>:
>
> Essaye avec :
>
>     (r'^tag/(?P<slug>[A-Z][a-z-]+)/$', # one tag details
>         'django.views.generic.list_detail.object_detail',
>         dict(
>             queryset = Tag.objects.all(),
>             template_object_name = 'tag',
>             slug_field='slug'
>         )
>     ),
>
> ça devrait marcher c'est ce que j'avais fait pour mon début de
> refonte. Je me demande comment je suis pas allé chercher là-dedans
> plus tôt...


(je remets la liste, ça peut toujours en intéresser d'autres)

Comme dit hier par IRC, j'ai pas essayé cette solution, mais plutôt celle ci
:

<
http://www.b-list.org/weblog/2006/11/16/django-tips-get-most-out-generic-views
>

Ce qui donne :

urlpatterns = patterns('',
       (r'^$', 'django.views.generic.list_detail.object_list',
dict(queryset= Post.objects.all(),extra_context={'all_tags': Tag.objects.all(),
'all_categories': Category.objects.all(),} )),
       (r'^post/(?P<slug>[-\w]+)/$', '
django.views.generic.list_detail.object_detail', dict(queryset=
Post.objects.all() , slug_field= 'url',extra_context={'all_tags':
Tag.objects.all(), 'all_categories': Category.objects.all(), } )),
       (r'^tag/$', 'django.views.generic.list_detail.object_list',
dict(queryset= Tag.objects.all(), extra_context={'all_tags': Tag.objects.all(),
'all_categories': Category.objects.all(), } )),
       (r'^tag/(?P<mytag>\w+)/$', 'atomecms.blog.views.postfortag_list'),

avec dans mon views.py :

from atomecms.blog.models import Post, Tag, Category
from django.views.generic.list_detail import object_list

# Create your views here.
def postfortag_list(request, mytag):
    whoistag = Tag.objects.get(name=mytag)
    postlist = Post.objects.filter(tag=whoistag.id)
    return object_list(request, queryset=postlist,
extra_context={'all_tags': Tag.objects.all(), 'all_categories':
Category.objects.all(),})

J'ai amélioré un peu tout ça dans le train ce matin mais c'est sur ma
partition kubuntu :-P

David, tu parlais hier de fusionner les lignes whoitag= et postlist = avec
un __set de mémoire - tu peux me redonner le truc - j'ai pas pensé à le
noter hier :-/

Bonne journée,
Nico

Hors ligne

#10 18-01-2007 10:35:36

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

Re : Question

2007/1/18, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com>:
> 2007/1/17, David Larlet <larlet _AT_ gmail.com>:
> > Essaye avec :
> >
> >     (r'^tag/(?P<slug>[A-Z][a-z-]+)/$', # one tag details
> >         'django.views.generic.list_detail.object_detail',
> >         dict(
> >             queryset = Tag.objects.all(),
> >             template_object_name = 'tag',
> >             slug_field='slug'
> >         )
> >     ),
> >
> > ça devrait marcher c'est ce que j'avais fait pour mon début de
> > refonte. Je me demande comment je suis pas allé chercher là-dedans
> > plus tôt...
>
> (je remets la liste, ça peut toujours en intéresser d'autres)
>
> Comme dit hier par IRC, j'ai pas essayé cette solution, mais plutôt celle ci
> :
>
> <
> http://www.b-list.org/weblog/2006/11/16/django-tips-get-most-out-generic-views>
>
> Ce qui donne :
>
> urlpatterns = patterns('',
>        (r'^$',
> 'django.views.generic.list_detail.object_list ',
> dict(queryset= Post.objects.all(),extra_context={'all_tags':
> Tag.objects.all(), 'all_categories': Category.objects.all(),} )),
>        (r'^post/(?P<slug>[-\w]+)/$',
> 'django.views.generic.list_detail.object_detail ',
> dict(queryset= Post.objects.all() , slug_field=
> 'url',extra_context={'all_tags': Tag.objects.all(),
> 'all_categories': Category.objects.all(), } )),
>        (r'^tag/$',
> 'django.views.generic.list_detail.object_list ',
> dict(queryset= Tag.objects.all(), extra_context={'all_tags':
> Tag.objects.all(), 'all_categories': Category.objects.all(), } )),
>        (r'^tag/(?P<mytag>\w+)/$',
> 'atomecms.blog.views.postfortag_list' ),
>
> avec dans mon views.py :
>
> from atomecms.blog.models import Post, Tag, Category
> from django.views.generic.list_detail import object_list
>
> # Create your views here.
> def postfortag_list(request, mytag):
>     whoistag = Tag.objects.get(name=mytag)
>     postlist = Post.objects.filter(tag=whoistag.id)
>     return object_list(request, queryset=postlist,
> extra_context={'all_tags': Tag.objects.all(), 'all_categories':
> Category.objects.all(),})
>
> J'ai amélioré un peu tout ça dans le train ce matin mais c'est sur ma
> partition kubuntu :-P
>
> David, tu parlais hier de fusionner les lignes whoitag= et postlist = avec
> un __set de mémoire - tu peux me redonner le truc - j'ai pas pensé à le
> noter hier :-/

Jan 17 21:49:24 <david`bgk> pourquoi tu fais pas whoistag.post_set à ce moment ?
Jan 17 21:49:45 <david`bgk> (pour avoir ta postlist)

Ça ferait postlist = whoistag.post_set.all()
Pas testé mais ça devrait être mieux.

Bonne journée,
David

Hors ligne

#11 18-01-2007 21:46:00

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

Re : Question

2007/1/18, David Larlet <larlet _AT_ gmail.com>:
>
>
> Jan 17 21:49:24 <david`bgk> pourquoi tu fais pas whoistag.post_set à ce
> moment ?
> Jan 17 21:49:45 <david`bgk> (pour avoir ta postlist)
>
> Ça ferait postlist = whoistag.post_set.all()
> Pas testé mais ça devrait être mieux.


Mieux je sais pas mais c'est pareil en tous cas pour le résultat ;-)


++
Nico

Hors ligne

#12 18-01-2007 22:21:32

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

Re : Question

J'ai fait un résumé ici si ça intéresse des gens :

<
http://www.unelectronlibre.info/index.php/post/2007/01/18/Django-et-les-vues-generiques-%3A-petit-exemple-de-filtrage-de-contenu
>

++
Nico

Hors ligne

Pied de page des forums