如何在基于类的视图中传递 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 中的变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在swiftui中的视图之间传递变量?

如何在 Laravel 中将变量从视图传递到控制器而不使用 URL 或表单

基于类的视图中的可选 url 参数

如何正确地将参数传递给 Django 中的基于类的视图实例?

如何在基于类的视图中编写自己的方法并在 url 中调用方法

Django - 将变量从基于类的视图传递到模板