【问题标题】:Django: How To Pass Only Selected Arguments Through URLDjango:如何通过 URL 仅传递选定的参数
【发布时间】:2021-02-22 17:16:43
【问题描述】:

我正在尝试创建一个可以单击按钮的搜索页面,该页面将过滤此页面中的帖子 [Splice Sounds][2](我认为您需要一个帐户才能查看此内容,因此请添加屏幕截图)。

为此,我认为我需要传递一个列表,以便我可以按该列表进行过滤,但我找不到这样做的方法。

为每种类型(由 for 循环创建)设置一个 GET 表单将允许我一次按一种类型进行过滤,但我想一次按多种类型进行过滤,这样就行不通了

在我链接到的网站中:他们将流派/标签传递到 url,所以我怎么能在 django 中做到这一点?

另外:我可以创建单独的 url 路径并链接到这些路径,但是我必须为每种类型/标签的组合都这样做,这太多了,所以我不能这样做。

该链接显示了一个通过 url 传递标签的站点,例如 https://splice.com/sounds/search?sound_type=sample&tag=drums,kicks

这里有一些相关代码:

这就是我想要过滤的方式,这就是为什么我需要传递一个 args 列表

for arg in args:
    Posts = Posts.filter(genres=arg)

网址

urlpatterns = [
    path('', views.find, name='find'),
    path('searchgenres=<genres_selected>', views.find_search, name='find_search'),
]

编辑:我尝试了很多方法,例如使用 ajax,但我无法让它正常工作

编辑 2:我已将问题更改为如何通过 URL 仅传递选定的参数

【问题讨论】:

  • 它不是一个列表,标签包含弦鼓,可以拆分的底鼓
  • @iklinac 你知道我可以通过 url 传递 只是选择的流派 因为如果我把它们都放在路径中,那么它会过滤所有这些
  • 我现在改了问题

标签: python django django-views django-urls


【解决方案1】:

要将列表传递到请求中,您可以:

  1. 使用 html 复选框并在视图中将它们聚合到一个列表中
  2. 使用单个文本框并在视图中解析

如果你以列表的形式获取请求,你可以使用Post.objects.filter(genre__in=genres)

了解 Django 允许使用 Q 对象from django.db.models import Q 进行复杂查找也可能会有所帮助。 | 字符表示 OR。这允许复杂的过滤。例如: Posts.objects.filter(Q(genre='Pop') | Q(genre='Rock') | Q(genre='Jazz'))

【讨论】:

  • 我明白这一点,但我正在尝试做 AND 代替。我展示的代码适用于 AND,但它需要一个类型列表才能使用,所以你知道有什么方法可以通过 URL 传递仅选定的类型吗?
  • 我改了问题
  • 对于每个选中的复选框,在提交表单后,这些值将被传递到请求中。
猜你喜欢
  • 2018-09-06
  • 2022-01-25
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
相关资源
最近更新 更多