python - 过滤器链的任意深度
问题描述
我想选择有多个标签的文章;
url(r"^tagged/(?P<tags>[+]*\w+)$", views.tagged, name="tagged"),
该请求的行为类似于“article/tagged/python+django”
在views.py中,确定标签长度,找到符合条件的文章
def tagged(request, tags):
tags = tags.split("+")
if len(tags) == 1:
articles = Article.objects
.filter(tags__name=tags[0])
if len(tags) == 2:
articles = Article.objects
.filter(tags__name=tags[0])
.filter(tags__name=tags[1])
if len(tags) == 3:
articles = Article.objects
.filter(tags__name=tags[0])
.filter(tags__name=tags[1])
.filter(tags__name=tags[2])
if ...
倍数看起来很笨拙,我怎么能用一个通用函数来解决这个问题来处理任意长度的标签。
解决方案
您可以使用for
循环来一一应用标签:
def tagged(request, tags):
tags = tags.split("+")
articles = Article.objects.all()
for tag in tags:
articles = articles.filter(tags__name=tag)
推荐阅读
- c++ - '自定义向量
::size': 无法访问在类“CustomVector”中声明的私有成员 ' - java - 如何停止从互联网上解析schemaLocation
- java - 使用 gradle 6.6 排除资源
- javascript - 为什么变量 secondMenu 在使用反应从选择菜单中选择选项时不更新?
- django - Django 应用程序未在管理页面中显示注册模型
- javascript - 如何将模式应用于忽略元素变换值的 SVG 元素?
- python - UnboundLocalError 从 .bat 运行 .py(使用 API);在命令提示符下运行良好
- date - 在两个不同的日期范围之间过滤 pyspark 数据帧行
- xamarin.forms - 如何根据开关输入显示/隐藏 xamarin 表单内容页面中的条目?
- visual-studio - VSCode 中仍然存在错误的终端仿真器