我目前正在定义正则表达式,以便捕获URL中的参数,如教程中所述。我如何访问参数从URL作为HttpRequest对象的一部分?

我的HttpRequest。GET当前返回一个空的QueryDict对象。

我想学习如何在没有库的情况下做到这一点,这样我就可以更好地了解Django。


当前回答

使用GET

request.GET["id"]

使用POST

request.POST["id"]

其他回答

这并不是您所需要的,但是这段代码有助于管理模板中的query_strings。

对于只有request对象的情况,可以使用request.parser_context['kwargs']['your_param']

def some_view(request, *args, **kwargs):
    if kwargs.get('q', None):
        # Do something here ..

Url参数可能被request.query_params捕获

有人会想知道如何在文件urls.py中设置路径,例如

domain/search/?q=CA

这样我们就可以调用查询。

事实上,没有必要在文件urls.py中设置这样的路由。你只需要在urls.py中设置路由:

urlpatterns = [
    path('domain/search/', views.CityListView.as_view()),
]

当你输入http://servername:port/domain/search/?q=CA。查询部分'?q=CA'将自动保留在你可以引用的哈希表中

request.GET.get('q', None).

下面是一个例子(文件views.py)

class CityListView(generics.ListAPIView):
    serializer_class = CityNameSerializer

    def get_queryset(self):
        if self.request.method == 'GET':
            queryset = City.objects.all()
            state_name = self.request.GET.get('q', None)
            if state_name is not None:
                queryset = queryset.filter(state__name=state_name)
            return queryset

此外,当你在URL中写入查询字符串时:

http://servername:port/domain/search/?q=CA

不要将查询字符串用引号括起来。例如,

http://servername:port/domain/search/?q="CA"