我目前正在定义正则表达式,以便捕获URL中的参数,如教程中所述。我如何访问参数从URL作为HttpRequest对象的一部分?
我的HttpRequest。GET当前返回一个空的QueryDict对象。
我想学习如何在没有库的情况下做到这一点,这样我就可以更好地了解Django。
我目前正在定义正则表达式,以便捕获URL中的参数,如教程中所述。我如何访问参数从URL作为HttpRequest对象的一部分?
我的HttpRequest。GET当前返回一个空的QueryDict对象。
我想学习如何在没有库的情况下做到这一点,这样我就可以更好地了解Django。
当前回答
这是另一个可以实现的替代解决方案:
在URL配置中:
urlpatterns = [path('runreport/<str:queryparams>', views.get)]
视图中:
list2 = queryparams.split("&")
其他回答
有人会想知道如何在文件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"
如果你只能访问视图对象,那么你可以通过这种方式获取URL路径中定义的参数:
view.kwargs.get('url_param')
如果你只有访问请求对象的权限,使用下面的方法:
request.resolver_match.kwargs.get('url_param')
在Django 3上测试。
当URL是domain/search/?q=哈哈,你会使用request.GET。(‘问’,”)。
Q是您想要的参数,如果没有找到Q,则“”是默认值。
然而,如果你只是配置你的URLconf**,那么你从regex捕获的信息将作为参数(或命名参数)传递给函数。
如:
(r'^user/(?P<username>\w{0,50})/$', views.profile_page,),
那么在你的视图。py中
def profile_page(request, username):
# Rest of the method
def some_view(request, *args, **kwargs):
if kwargs.get('q', None):
# Do something here ..
我想分享一个可以节省你时间的小窍门。 如果你计划在urls.py文件中使用这样的东西:
url(r'^(?P<username>\w+)/$', views.profile_page,),
这意味着www.example.com/<用户名>。一定要把它放在URL条目的末尾,否则,它很容易与下面的URL条目发生冲突,即访问其中一个URL条目会给你一个漂亮的错误:用户匹配查询不存在。 我自己也经历过;希望能有所帮助!