如何在应用程序的urls.py中设置通用视图?

时间:2011-02-04 20:17:06

标签: python django django-generic-views urlconf

假设我有一个项目的urlconf,其中包含myapp的urlconf:

urlpatterns = patterns('',
    (r'^myapp', include(myapp.urls)),
)

myapp/urls.py定义了一些路线:

urlpatterns = patterns('myapp.views',
    (r'^manager$', 'manager_view'),
)

我想在myapp中使用通用视图(即显示项目列表),但如果我在myapp/urls.py中定义它,请执行以下操作:

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),
)

由于myapp.views前缀,这不起作用。当然,我可以将通用视图模式放在项目的urls.py中,但是为应用程序设置单独的urls.py将不再有意义。

那么如何在app的urlconf中使用通用视图呢?

1 个答案:

答案 0 :(得分:3)

您根本不需要使用前缀 - 您可以为每个网址指定每个视图的完整路径:

urlpatterns = patterns('',
    (r'^manager$', 'myapp.views.manager_view'),
    (r'^items/(?P<page>[0-9]+)$', 'django.views.generic.list_detail.object_list',
        items_list),
)

或者,您可以在单个urlconf中拥有多个urlpatterns,并将它们连接起来:

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),
)