【问题标题】:get parameter value in url Django在 url Django 中获取参数值
【发布时间】:2020-08-24 18:13:42
【问题描述】:

我是 Django 新手,我想从 URL 接收一个值,然后在过滤器中使用它,但是我遇到了这个问题。

其中 value 是模型的一个字段,在 view.py 中

class ModelNumber(generics.ListAPIView):
    permission_classes = [
        IsAuthenticated,
    ]
    serializer_class = ModelSerializer 

    def get_queryset(self):
        queryset = Model.objects.all()
        value = self.request.query_params.get('value')
        return Model.objects.filter(value = value)

在 urls.py

path('model_number/(?P<receipt_ballot>\w+)$', views.ModelNumber.as_view()),

和 Model.py

class Model(models.Model):                                                              
    value = models.CharField("Number Value", max_length=12, null=True)

在网址中

http://192.168.0.3:8080/model_number/001-000002/

错误:

找不到页面 (404)

当前路径 /model_number/001-000002/ 与其中任何一个都不匹配。

【问题讨论】:

  • 您好托尼,欢迎来到 SO!您能否进一步详细说明您的问题,因为我发现很难理解您所面临的确切问题
  • @Bernard'BetaBerlin'Parah 我已经对其进行了编辑,在发送 url 中的参数时我收到错误 Page not found (404)
  • 您需要编辑您的 url 以显示您想要获得的值 http://192.168.0.3:8080/?model_number=001-000002/。那么您可以使用当前代码获取值
  • 另一种方法是像这样使用 kwargs ...self.kwargs['param_name']

标签: python django filter django-rest-framework get


【解决方案1】:

您可以使用 url 中定义的 kwargs 键来获取该键的值。喜欢:

    def get_queryset(self):
        # What you wanted
        value_of_url_parameter = self.kwargs.get('receipt_ballot')

        queryset = Model.objects.all()
        value = self.request.query_params.get('value')
        return Model.objects.filter(value = value)

【讨论】:

  • 说真的,您应该坚持一个答案,而不是等待人们发布 cmets 和答案,然后您继续进行编辑。如果你不确定冷静。这不是比赛
  • 哈哈!!!你认为自己是一个有影响力的人!!!这对你有好处...
  • 加油兄弟,让我解释一下发生了什么...首先,我认为它是基于函数的views.py,所以我回答了它。通过,我编辑你的时候做了评论。所以,在你看来,我在模仿你。是的,我同意我会指出这一点......那是我的错误......祝你有个愉快的一天!
  • 所以我的假设是正确的,但我认为你应该留下答案,我已经要求 OP 接受你的答案。我是好伙伴。请放回完整答案
【解决方案2】:

你需要修改你的url来捕获参数

http://192.168.0.3:8080?model_number=001-000002/

class ModelNumber(generics.ListAPIView):
    permission_classes = [
        IsAuthenticated,
    ]
    serializer_class = ModelSerializer 

    def get_queryset(self):
        queryset = Model.objects.all()
        value = self.request.query_params.get('value')
        return Model.objects.filter(value = value)

注意网址中的问号

【讨论】:

  • 查询参数后不能使用/001-000002/
  • 那么为什么不指出这一点,而不是直接复制它并将其添加到您的答案中呢?
  • 我不生气..和平伙伴
  • 另外,我认为value = self.request.query_params.get('value') 在这种情况下应该是self.request.query_params.get('receipt_ballot')
  • 是的,没错,我忽略了receipt_ballot 给出了一个更通用的答案,我使用value 的原因
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 2017-09-15
  • 2012-02-01
  • 2021-05-18
  • 2022-01-08
相关资源
最近更新 更多