【问题标题】:Django URL, pass parameters in URLDjango URL,在 URL 中传递参数
【发布时间】:2018-12-05 11:47:29
【问题描述】:

我想创建如下网址:

/api/foodfeeds/?keywords=BURGER,teste&mood=happy&location=2323,7767.323&price=2

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^api/foodfeed/(?P<keywords>[0-9.a-z, ]+)/(?P<mood>[0-9.a-z, ]+)/(?P<location>[0-9]+)/(?P<price>[0-9]+)/$', backend_views.FoodfeedList.as_view()),
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

views.py

class FoodfeedList(APIView):
    # permission_classes = (permissions.IsAuthenticated,)
    def get(self,request,keywords,mood,location,price):
        print(request.GET['keywords'])

【问题讨论】:

  • 您遇到的错误是什么?你期待什么?
  • 你不能这样传递参数。这些是查询参数,未在url 中指定。您应该在views.py 中实现逻辑并检查那里的查询参数。
  • 什么是传递参数的好方法?

标签: python django python-3.x django-rest-framework django-views


【解决方案1】:

正如@Umair 所说,您将这些键作为 URL 查询参数 传递,因此您不必在 URLPATTERNS

在您的情况下,要获取您通过 URL 传递的数据,请按照以下代码 sn-p

#urls.py
urlpatterns = [
                  path('admin/', admin.site.urls),
                  url(r'^api/foodfeed/', backend_views.FoodfeedList.as_view()),
              ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)


#views.py
class FoodfeedList(APIView):
    # permission_classes = (permissions.IsAuthenticated,)
    def get(self, request):
        print(request.GET) # print all url params
        print(request.GET['keywords'])
        print(request.GET['mood'])
        # etc

【讨论】:

    【解决方案2】:

    那些keywordsmoodlocation等是query params,你不应该在url中包含它们,而是应该通过request.query_params访问它们

    参考:http://www.django-rest-framework.org/api-guide/requests/#query_params

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 2021-01-05
      • 1970-01-01
      • 2023-03-04
      • 2021-09-12
      • 2018-07-05
      • 2011-12-19
      • 2016-02-20
      • 2017-08-11
      相关资源
      最近更新 更多