如何在URL中定义多个可选变量?

时间:2013-12-23 14:51:50

标签: python django django-urls

在django doc中提出改为GET方法使用urlpatterns,并且方便地处理这些变量。但如果至少有一个变量是不必要的,我将不得不在url.py中写更多行。我喜欢我可以避免这个吗?

实施例: 如果我想在给定年份中抽取一些帖子,在urlpatterns中我应该添加如下内容:

url(r'^articles/(?P<year>\d{4})/$', 'news.views.show_archive'),
  

url:... / articles / 1994 /

如果我想在特定年份制作特定月份的样本位置,在urlpatterns中我应该添加如下内容:

url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.show_archive'),
  

url:... / articles / 2003/03 /

但如果我想看到一年中特定月份创建的所有年份的记录,我还要添加这一行:

url(r'^articles/(?P<month>\d{2})/$', 'news.views.show_archive'),
  

url:... / articles / 03 /

但我想只做一行指定最大变量集,但这会处理任何这些URL。 说实话,我不确定这是可能的。

2 个答案:

答案 0 :(得分:1)

regexp可以有可选部分,视图函数可以有可选参数。此外,您仍然可以使用查询字符串(通过request.GET)来查找没有业务属于URL的内容(例如“搜索”视图的查询字词,列表视图的排序和过滤等)。

使用urlpatterns而不是querystrings是建立干净的“语义”网址,即/blog/posts/<post_id>/而不是/blog/posts/?post_id=<post_id>

答案 1 :(得分:0)

你可以试试这个

url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.show_archive'),


def show_archive(request,year=None,month=None):
    if year and month:
       .....................
    elif year:
       .....................
    elif month:
        ....................