按语言 and/or 类别过滤的路由
Routes filtering by Language and/or category
我正在构建一个类似 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
我想做的是在导航功能中建立与语言 and/or 类别的关系。是否有可能创建这样的东西?我实际上真的迷失了尝试完成这样的事情。当时我有一些看起来有点像我正在尝试做的事情,这里是片段:
@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)
您可以执行此操作以检索具有给定语言 和 类别的帖子:
@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())
我正在构建一个类似 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
我想做的是在导航功能中建立与语言 and/or 类别的关系。是否有可能创建这样的东西?我实际上真的迷失了尝试完成这样的事情。当时我有一些看起来有点像我正在尝试做的事情,这里是片段:
@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)
您可以执行此操作以检索具有给定语言 和 类别的帖子:
@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())