2010-09-20 4 views
1

J'ai les modèles de modèles et d'URL suivants. Il existe un modèle de message que je souhaite router vers différentes URL en fonction de la catégorie. Y at-il un moyen de le faire en passant des informations supplémentaires dans app/urls.py?Django: acheminement du même modèle mais d'un champ de catégorie différent pour séparer les URL

Dans app/posts/models.py

class Post(models.Model): 
    author = ... 
    title = ... 
    body = ... 
    category = models.CharField() 

Dans app/urls.py

urlpatterns = patterns(
    '', 
    (r'^blog/', include('posts.urls'), {'category': 'blog'}), 
    (r'^school/', include('posts.urls'), {'category': 'school'}), 
) 

je crois comprendre que l'information supplémentaire à partir app/urls.py est inclus dans chaque route url dans app/posts/urls.py. Y a-t-il un moyen d'utiliser cette information? Que puis-je mettre à la place des points d'exclamation ci-dessous?

Dans app/posts/urls.py

from models import Post 

queryset = Post.objects.order_by('-pub_date') 

urlpatterns = patterns(
    'django.views.generic.list_detail', 
    url(r'^$', 'object_list', 
     {'queryset': queryset.filter(category=!!!!!!)} 
     name="postRoot"), 

    url(r'^(?P<slug>[-\w]+)/$', 'object_detail', 
     {'queryset': queryset.filter(category=!!!!!!)}, 
     name="postDetail") 
    ) 

Merci, Joe

Répondre

2

Je ne suis pas au courant d'une façon d'utiliser l'URL des paramètres de la façon dont vous avez indiqué. Si quelqu'un sait mieux, corrigez-moi.

J'ai fait face à une situation similaire il y a quelque temps et je me suis contenté d'une fine couche sur la vue list_detail.

# views.py 
from django.views.generic.list_detail import object_list 

def object_list_wrapper(*args, **kwargs): 
    category = kwargs.pop('category') 
    queryset = Post.objects.filter(category = category) 
    kwargs['queryset'] = queryset 
    return object_list(*args, **kwargs) 

#urls.py 
urlpatterns = patterns('myapp.views', 
    url(r'^$', 'object_list_wrapper', {}, name="postRoot"),   
... 
+0

Assez sûr que c'est la réponse. Dans mon expérience, les paramètres capturés par urlpatterns ne peuvent être récupérés qu'à partir d'une fonction de vue. –

+0

Oui, je le pense aussi, mais j'ai pensé que je demanderais. Quoi qu'il en soit, cela a beaucoup aidé grâce à vous. – Joe

Questions connexes