2015-05-11 31 views
0

我正在构建一个StumbleUpon应用程序,其内容必须按语言和类别进行过滤。我对每种语言和类别都有两条简单的路由,但我想知道是否可以在一个简单的路由器声明中使用这两条路由。为了不弄糊涂,我使用Peewee作为ORM。按语言和/或类别过滤的路由

这里是我已经定义的路线:

@app.route("/<language>") 
def languages(language): 
    links = [] 

    for contenido in models.Post.select().where(models.Post.language**language): 
     links.append(contenido.content) 

    iframe = random.choice(links) 
    return render_template('language.html', iframe=iframe, language=language) 


@app.route("/<category>") 
def categories(category): 
    links = [] 

    for contenido in models.Post.select().where(models.Post.category**category): 
     links.append(contenido.content) 

    iframe = random.choice(links) 
    return render_template('category.html', iframe=iframe, category=category) 

models.py

class Post(Model): 
    timestamp = DateTimeField(default=datetime.datetime.now) 
    user = ForeignKeyField(
     rel_model=User, 
     related_name='posts' 
    ) 
    language = TextField() 
    category = TextField() 
    content = TextField() 

    class Meta: 
     database = DATABASE 

我试图做的是在语言和/或类别的关系导航功能。有没有可能创建这样的东西?我其实很想完成这样的事情。在我的东西,可能看起来有点什么,我试图做的时候,这里是片段:

@app.route("/<language>/<category>") 
def mixin(language, category): 
    language_links = [] 
    category_links = [] 

    for contenido in models.Post.select().where(models.Post.language**language): 
     language_links.append(contenido.content) 

    for contenido in models.Post.select().where(models.Post.category**category): 
     category_links.append(contenido.content) 


    if category_links == []: 
     iframe = random.choice(language_links) 
    else: 
     iframe = random.choice(category_links) 

    return render_template('language.html', iframe=iframe, language=language, category=category) 

回答

0

你可以做到这一点检索与给定的语言类职位:

@app.route("/<language>/<category>") 
def mixin(language, category): 
    links = [] 

    query = models.Post.select().where(
     (models.Post.language ** language) & 
     (models.Post.category ** category)) 
    for contenido in query: 
     links.append(contenido.content) 

    iframe = random.choice(links) 
    return render_template('language.html', iframe=iframe, language=language, category=category) 

为了获得给定的语言类的帖子,你可以这样写:

query = models.Post.select().where(
    (models.Post.language ** language) | # note the "pipe" instead of "&" 
    (models.Post.category ** category)) 

此外,“**”操作符可能效率低下。是否有一个原因,你不是使用“==”来代替?如果你需要能够做大小写不敏感的匹配,你可以这样做:

(fn.LOWER(models.Post.language) == language.lower())