2017-08-10 154 views
0

从一个星期以来,我搜索的时候没有任何问题的答案。我不知道我是否以良好的方式继续进行,但我尝试拥有一个如下所示的网址:article/title/0/search=ad/2017-08-01/2017-08-09/;参数是(大括号):article/{filter}/{page}/search={search}/{date1}/{date2}/Django的url多个参数

我url.py正则表达式是:

url(r'article/(?P<filter>.+)/(?P<page>\d+)/(?:search=(?P<search>.*)/)?(?:(?P<date1>(\d{4}-\d{1,2}-\d{1,2})?)/)(?:(?P<date2>(\d{4}-\d{1,2}-\d{1,2})?)/)?$')

当值searchdate1date2被填充,我的网址认为{searched word}/2017-08-01/2017-08-09/search值。

search,date1date2是空的,我的链接是这样的:article/title/0/search=///。当日期填入article/title/0/search=/2017-08-01/2017-08-09/

在我的模板,我需要我的网址是这样的:{% url "view" filter page search date1 date2 %}

有人能帮助我,纠正我,如果我在错误的方式做到了?

编辑

我会尝试在其他的方式来重新问我的问题:

在我的模板,在具有有3个领域不需要search, date1 and date2形式,使他们能够无(这是我的问题)。我有一些链接需要更改视图参数filter, page中的一个,并在url中保留字段参数。 当表单POST到我的视图(实际上是这样的def AllArticle(request, filter, page, search="", date1="", date2=""))时,我用它们来过滤我的ArticleModel对象(我不需要帮助,已经完成并且工作)。

根据@Cory_Madden,我从来没有使用过这种方法,我不知道如何使用它。我只是试了一下,django返回了一个MultiValueDictKeyError。

+0

您可以更具体地了解您的模型以及您想要过滤或搜索的内容。请更清楚地发布您的模型和您的过滤器要求 –

+0

无论您使用'?'分隔的GET参数是否被*'not *'看作您的'urls.py'。只有url本身。 –

回答

1

这不是你如何使用GET参数。您需要从request对象访问它们。因此,让我们说你有一个基于功能视图,这是你将如何访问附加在网址中的任何GET参数:

def index(request, name='World'): 
    search_param = request.GET['search'] 
    ... 

而且你在这种情况下,网址如下:

url(r'/(?P<name>.*)', views.index) 

请求然后在地址栏中的路径看起来像:

/Joe?search=search-term 

而且request.GET['search']将返回"search-term"

+0

这不起作用。它给我一个MultiValueDictKey错误。 – Trytio

+0

这很可能意味着你没有在你的URL中提供一个GET参数。将其更改为'search_param = request.GET.get('search','')' –