鍍金池/ 問(wèn)答/Python  HTML/ 如何實(shí)現(xiàn)植物的科屬索引?

如何實(shí)現(xiàn)植物的科屬索引?

如題,本菜鳥要做一個(gè)植物志網(wǎng)站,想要實(shí)現(xiàn)一個(gè)科屬索引功能。有模型如下:

class Family(models.Model):
    name = models.CharField(max_length=100, verbose_name="名稱")
    slug = models.SlugField(max_length=100)
    description = models.TextField(verbose_name="描述")
    created = models.DateTimeField(auto_now_add=True, verbose_name="創(chuàng)建時(shí)間")

    class Meta:
        ordering = ['name']

    def __str__(self):
        return self.name


class Category(models.Model):
    family = models.ForeignKey(Family, related_name='categories', verbose_name="所屬科")
    name = models.CharField(max_length=100, verbose_name="名稱")
    slug = models.SlugField(max_length=100)
    description = models.TextField(verbose_name="描述")
    created = models.DateTimeField(auto_now_add=True, verbose_name="創(chuàng)建時(shí)間")

    class Meta:
        ordering = ['name']
        
    def __str__(self):
        return self.name


class Plant(models.Model):
    category = models.ForeignKey(Category, related_name='plants', verbose_name="所屬屬")
    name = models.CharField(max_length=200, verbose_name="名稱")
    alias = models.CharField(max_length=200, verbose_name="別名")
    latin_name = models.CharField(max_length=200, verbose_name="拉丁名")
    body = models.TextField(verbose_name="描述")
    slug = models.SlugField(max_length=200)
    created = models.DateTimeField(auto_now_add=True, verbose_name="創(chuàng)建時(shí)間")
    updated = models.DateTimeField(auto_now=True, verbose_name="更新時(shí)間")

    class Meta:
        ordering = ['name']

    def __str__(self):
        return self.name
        

需求大致描述如下:

  1. 首先在頁(yè)面上顯示所有的科名
  2. 點(diǎn)擊某個(gè)科名時(shí),出現(xiàn)該科名下所有的屬名
  3. 點(diǎn)擊某個(gè)屬名時(shí),出現(xiàn)該屬名下所有的植物

類似于這樣的頁(yè)面(截圖自山東農(nóng)業(yè)大學(xué)校園植物志):

圖片描述

請(qǐng)問(wèn)該如何定義views 以及 模板?(大致思路?)

若有哪位前輩有良好的建議,不勝感激!

回答
編輯回答
別瞎鬧

這個(gè)簡(jiǎn)單啊。就一個(gè)列表頁(yè)搞定。詳情頁(yè)就不說(shuō)了。

@app.route('/')
def index():
    family = request.args.get('family', 'all')
    category = request.args.get('category', 'all')
    query = dict()
    if family != 'all':
        query['family'] = family
    if category != 'all':
        query['category'] = category
    plants = Plant.query.filter_by(**query)
    # 分頁(yè)等其他的支持就不說(shuō)了。
2017年4月18日 13:09