【问题标题】:Passing a parameter to a ListView in Django将参数传递给 Django 中的 ListView
【发布时间】:2018-01-13 17:11:51
【问题描述】:

我有一个带有某些值的 HTML 下拉列表,我想将这些值传递给我的通用视图,以便返回过滤后的列表。

班级:

class filteredListView(generic.ListView):
    template_name = 'guestlist/guestlist.html'

    def get_queryset(self, **kwargs):
        relation = kwargs.get('relation', None)
        if relation == 'all':
            return Guest.objects.all()
        if relation == 'grooms_side':
            return Guest.objects.filter(grooms_side=True)
        if relation == 'brides_side':
            return Guest.objects.filter(brides_side=True)
        if relation == 'friends':
            return Guest.objects.filter(friends=True)

html 块:

<th colspan="4">
  <label>Filter by Relation
    <select onchange="location='filtered'">
      <option value="all">All</option>
      <option value="grooms_side">Groom's Side</option>
      <option value="brides_side">Brides's Side</option>
      <option value="friends">Friends</option>
    </select>
  </label>
</th>

我尝试像常规视图一样使用普通的 href 传递值,但这给了我一个 NoReverseMatch 异常。

urls.py:

from django.conf.urls import url
from . import views

app_name = 'guestlist'

urlpatterns = [

    # /guestlist/
    url(r'^$', views.indexView.as_view(), name='index'),
    # /guestlist/
    url(r'^guestlist/$', views.guestListView.as_view(), name='guestlist'),
    # /guestlist/add
    url(r'^guestlist/add/$', views.guestCreate.as_view(), name='add'),
    # /guestlist/filtered
    url(r'^guestlist/filtered$', views.filteredListView.as_view(), {'relation': 'relation'}, name='filtered'),

]

我的问题是如何将下拉列表选项中的值传递给视图。 谢谢。

编辑:我根据其中一个答案更改了一些内容,但问题仍然存在。我应该在urls.py 的字典中输入什么来传递值?

【问题讨论】:

  • 参见文档中的here
  • 另外,这个answer
  • 另外,这个例子展示了如何传递一个硬编码的字符串,我希望传递一个变量。
  • @ChihebNexus 问题已根据您的回答进行了编辑,所以感谢您让我更接近解决方案!仍在尝试将变量而不是硬编码的字符串传递给字典。

标签: python html django listview


【解决方案1】:

您需要使用表单将下拉列表中的值发送到过滤器视图。而且没有理由在 URL 模式本身中添加任何内容。

url(r'^guestlist/filtered$', views.filteredListView.as_view(), name='filtered'),


<th colspan="4">
  <form action="{% url filtered %}" method="GET">
  <label>Filter by Relation
    <select name="relation">
      <option value="all">All</option>
      <option value="grooms_side">Groom's Side</option>
      <option value="brides_side">Brides's Side</option>
      <option value="friends">Friends</option>
    </select>
  </label>
  <input type="submit" value="Filter">
  </form>
</th>

在视图中:

def get_queryset(self, **kwargs):
    relation = self.request.GET.get('relation', None)
    ...

【讨论】:

  • 但是如何在视图中使用它呢?我需要定义某个字段以从 html 中获取值吗?
  • 是否可以用列表视图实现post请求
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 2014-11-08
  • 2020-04-13
相关资源
最近更新 更多