如何在基于类的视图中传递 URL 中的变量
Posted
技术标签:
【中文标题】如何在基于类的视图中传递 URL 中的变量【英文标题】:How to pass a variable in the URL in class based views 【发布时间】:2015-11-08 12:18:45 【问题描述】:我有以下事件源(使用 Django-ical
)
class EventFeed(ICalFeed):
def items(self):
meeting_id = self.kwargs['meeting_id']
return Meeting.objects.get(id=meeting_id)
我正在尝试通过 URL conf 传递 meeting_id
,如下所示:
url(r'^meetings/(?P<meeting_id>\d+)/$', EventFeed()),
但是这会返回'EventFeed' object has no attribute 'kwargs'
?
【问题讨论】:
肯定 get_queryset 应该返回一个查询集,而不是一个 ID? @DanielRoseman 我不确定 - 我正在尝试关注 ***.com/a/8925554/2429989 但这并不是说要返回ID。只是说从那里获取它,以便您可以继续并使用它来查询模型并返回查询集。 谢谢,所以我可以在任何定义中使用self.kwargs
?我通过编辑简化了我的问题,不幸的是我在获取属性时仍然遇到问题......
django-ical 说它是基于 syndication 框架的,它与基于类的视图完全没有关系,它根本不使用 kwargs。我什至不确定您要做什么;这应该是一个提要,即事件列表,而不是单个细节。
【参考方案1】:
正如 Daniel 在 cmets 中指出的,这是一个联合框架。因此我们需要使用get_object
,并在Meeting
对象上使用filter
而不是get
:
class EventFeed(ICalFeed):
def get_object(self, request, *args, **kwargs):
return int(kwargs['meeting_id'])
def items(self, meeting_id):
return Meeting.objects.filter(id=meeting_id)
【讨论】:
以上是关于如何在基于类的视图中传递 URL 中的变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 中将变量从视图传递到控制器而不使用 URL 或表单