Django视图/过滤器

Django视图/过滤器,django,filtering,Django,Filtering,我刚刚完成了Django教程,虽然对学习更多感到兴奋,但我一点也不精通。我想你可能会说我不知道在这一点上有多危险 假设我有一个音乐数据库。我有一个艺术家模型、一个专辑模型、一个流派模型和一个歌曲模型。我希望能够根据给定的过滤器显示相册(甚至艺术家);因此,我的前端将显示相册列表,并提供一种过滤列表的方法。例如,“Jazz”链接只能显示爵士乐专辑。很简单 我可以想出几种方法来实现这一点,但我想从正确的角度出发……开始形成“最佳实践”Django方法。我能想到的一种方法是写视图……这样/albums

我刚刚完成了Django教程,虽然对学习更多感到兴奋,但我一点也不精通。我想你可能会说我不知道在这一点上有多危险

假设我有一个音乐数据库。我有一个艺术家模型、一个专辑模型、一个流派模型和一个歌曲模型。我希望能够根据给定的过滤器显示相册(甚至艺术家);因此,我的前端将显示相册列表,并提供一种过滤列表的方法。例如,“Jazz”链接只能显示爵士乐专辑。很简单

我可以想出几种方法来实现这一点,但我想从正确的角度出发……开始形成“最佳实践”Django方法。我能想到的一种方法是写视图……这样/albums/jazz只显示jazz。另一种方法是编写过滤相册的模型级方法。然而,在这里,我对如何实际实现这样一个过滤器有点模糊


有人能概括介绍一下如何最好地完成这项任务吗?

假设您知道如何在项目中构造应用程序(即教程所教的内容),您可以使用示例
models.py
url.py
views.py
为您的示例应用程序
myapp
处理此示例

示例
models.py

class Genre(models.Model):
    name = models.CharField(unique=True) # set name to be unique
    ...

class Album(models.Model):
    genre = models.ForeignKey(Genre)
    ...
urlpatterns = patterns('',
    ...
    url(
        r'^albums/(?P<genre>[-\w]+)/$',
        ListAlbumsByGenreView.as_view(), name='list_albums_by_genre_view'
    ),
    ...
)
示例
url.py

class Genre(models.Model):
    name = models.CharField(unique=True) # set name to be unique
    ...

class Album(models.Model):
    genre = models.ForeignKey(Genre)
    ...
urlpatterns = patterns('',
    ...
    url(
        r'^albums/(?P<genre>[-\w]+)/$',
        ListAlbumsByGenreView.as_view(), name='list_albums_by_genre_view'
    ),
    ...
)
上面的列表视图将
相册
放在HTML模板的上下文中;其中包含按流派筛选的相册列表


上面使用的单独导入的函数在Django文档中都有精美的文档记录

多谢各位。我唯一不理解的一行是:“context=super(ListAlbumsByGenreView,self)。get_context_data(**kwargs)
get_context_data
是继承的
ListView
类方法;必须调用其
super
父方法,以便使用父函数返回的任何上下文启动上下文。例如,如果
ListView
在上下文中设置了一个
page\u no
,此调用将确保实际发生这种情况。请注意,这只是一个示例。在本例中,我这样做只是为了遵循最佳实践(您也应该这样做)。