2016-11-07 80 views
0

我想为我的网站做一个查询系统,我认为最好的方法和最简洁的方法是使用url模式分配搜索变量。Django:使用url进行查询(使用url分配变量)

因此,例如,我要搜索模型User的对象:


用户发送的HttpRequest到以下网址:

https://127.0.0.1/search/q="admin"

现在的HttpRequest也被送到search观点,我们以某种方式得到q变量数据。

def search(request): 
    for query in User.objects.all(): 
     if q in query: # < We somehow need to get data of 'q'. 
      return HttpResponse(q) 

,因为我已经在User.objects.all()管理,这应该返回的HttpResponse的 '管理员'。


这个url模式怎么做?所以我可以从url中分配q变量,然后将它发送给系统以查找它?

+3

您可以使用查询参数,但为此,您的网址应如下所示:'https://127.0.0.1/search/?q = admin'(注意问号)。 然后,在你看来,你可以使用'request.GET [param]'(在你的情况下'request.GET ['q']')来访问所有的查询参数。您可以阅读[this](https://en.wikipedia.org/wiki/Query_string)wiki文章以了解有关查询参数的更多信息。 – iulian

+2

你有看过这个问题吗? http://stackoverflow.com/questions/150505/capturing-url-parameters-in-request-get 关于如何在Django中处理GET参数的官方文档可以在这里找到:https://docs.djangoproject.com /en/1.10/ref/request-response/#django.http.HttpRequest.GET – maennel

回答

1

我有这个网址的问题:

https://127.0.0.1/search/q="admin" 

没有?在URL中,所以没有查询字符串,它都是“路径”的一部分。如果使用诸如="这样的字符,那么会混淆很多东西,如果它起作用的话。

要么只是做

https://127.0.0.1/search/admin 

有了这样r'^search/(?P<querystring>.+)$'的URL模式,或者

https://127.0.0.1/search/?q=admin 

在这种情况下,查询字符串将在request.GET['q'];也可以使用Django forms来处理查询参数(例如验证它们)。

+0

我知道第一种方法,但没有发现它是好的设计,第二种方法就是我所需要的。 – ShellRox

1

您可以捕获从URL中指定字符串是这样的:

urls.py:

urlpatterns = [ 
    url(r'^blog/page(?P<num>[0-9]+)/$', views.page), 
] 

views.py:

def page(request, num="1"):