Django url多个参数

时间:2017-08-10 04:24:33

标签: python regex django django-urls

我从一周开始搜索我的问题没有任何答案。我不知道我是否以良好的方式继续前进,但我试图找到一个如下所示的网址:article/title/0/search=ad/2017-08-01/2017-08-09/;其中参数是(括号中):article/{filter}/{page}/search={search}/{date1}/{date2}/

我的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值。

searchdate1date2为空时,我的链接如下: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的表单,所以它们可以是None(这是我的问题)。我有一些链接需要只更改其中一个视图参数filter, page并将字段参数保留在网址中。 当表单POST到我的视图(实际上就像这个def AllArticle(request, filter, page, search="", date1="", date2=""))时,我用它们来过滤我的ArticleModel对象(我不需要帮助,已经完成并且工作了)。

根据@Cory_Madden的说法,我之前从未使用过这种方法,但我不知道如何使用它。我刚尝试过,django给我一个MultiValueDictKeyError。

1 个答案:

答案 0 :(得分:1)

这不是您使用GET参数的方式。您需要从request对象访问它们。所以假设你有一个基于函数的视图,这就是你如何访问附加到你的URL的任何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"