Comment configurer des vues génériques dans le fichier urls.py d'une application ?
-
29-10-2019 - |
Question
Disons que j'ai l'urlconf d'un projet qui inclut myapp
L'URLconf de :
urlpatterns = patterns('',
(r'^myapp', include(myapp.urls)),
)
et un myapp/urls.py
avec quelques itinéraires définis :
urlpatterns = patterns('myapp.views',
(r'^manager$', 'manager_view'),
)
Je souhaite utiliser des vues génériques dans myapp
(c'est à dire.pour afficher une liste d'articles), mais si je la définis dans myapp/urls.py
comme ça:
items_list = {
'queryset': Item.objects.all(),
}
urlpatterns = patterns('myapp.views',
(r'^manager$', 'manager_view'),
(r'^items/(?P<page>[0-9]+)$', 'django.views.generic.list_detail.object_list',
items_list),
)
Cela ne fonctionnera pas à cause du myapp.views
préfixe.Bien sûr, je pourrais mettre les modèles de vues génériques dans le fichier urls.py du projet, mais avoir un urls.py distinct pour l'application n'aurait plus de sens.
Alors, comment puis-je utiliser des vues génériques dans l'urlconf d'une application ?
La solution
Vous n'avez pas du tout besoin d'utiliser le préfixe - vous pouvez spécifier le chemin complet vers chacune de vos vues pour chaque URL :
urlpatterns = patterns('',
(r'^manager$', 'myapp.views.manager_view'),
(r'^items/(?P<page>[0-9]+)$', 'django.views.generic.list_detail.object_list',
items_list),
)
Alternativement, vous pouvez avoir plusieurs modèles d'URL dans une seule configuration d'URL et les concaténer :
urlpatterns = patterns('myapp.views',
(r'^manager$', 'manager_view'),
)
urlpatterns += patterns('django.views.generic',
(r'^items/(?P<page>[0-9]+)$', 'list_detail.object_list',
items_list),
)