如何从 Django generic.ListView 中的用户前端获取参数?

Posted

技术标签:

【中文标题】如何从 Django generic.ListView 中的用户前端获取参数?【英文标题】:How to get parameter from user front-end in Django generic.ListView? 【发布时间】:2019-09-10 08:26:45 【问题描述】:

我正在构建一个应用程序,用户可以在其中搜索附近的位置。为此,我在我的views.py 中使用了这个功能:

latitude = 23.734413
longitude = 90.4082535

user_location = Point(longitude, latitude, srid=4326)
class NearbyServices(generic.ListView):
    model = Service
    context_object_name = 'services'
    queryset = Service.objects.annotate(distance=Distance('location', user_location)).order_by('distance')[0:6]
    template_name = 'services/nearby.html'

我目前正在使用硬编码的用户位置,但我想让用户通过首先使用 HTML5 GeoLocation API 获取他们的位置来找到附近的位置。任何有关如何将他们的位置从前端获取到 listview 函数的帮助都会非常有帮助!

【问题讨论】:

【参考方案1】:

与任何基于 Django 类的视图一样,如果您需要根据请求数据自定义任何内容,则需要在方法中进行。在这种情况下,您应该删除queryset 属性并定义get_queryset

class NearbyServices(generic.ListView):
    model = Service
    context_object_name = 'services'
    template_name = 'services/nearby.html'

    def get_queryset(self):
        user_location = self.request.however_you_get_the_location
        queryset = Service.objects.annotate(distance=Distance('location', user_location)).order_by('distance')[0:6]
        return queryset

【讨论】:

以上是关于如何从 Django generic.ListView 中的用户前端获取参数?的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何从模板调用视图函数?

如何从 django 信号返回数据?

如何从 python 代码中调用 django 模板标签?

如何从 json 数据推断 Django 模型?

Django:如何从模板中识别调用视图?

如何从其他模块向 Django 类添加新方法? [复制]