将参数传递给 Django 中的 ListView
Posted
技术标签:
【中文标题】将参数传递给 Django 中的 ListView【英文标题】:Passing a parameter to a ListView in Django 【发布时间】: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 问题已根据您的回答进行了编辑,所以感谢您让我更接近解决方案!仍在尝试将变量而不是硬编码的字符串传递给字典。 【参考方案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请求以上是关于将参数传递给 Django 中的 ListView的主要内容,如果未能解决你的问题,请参考以下文章