如何在Django中反转带有可选字段参数的URL?

9

我有一个带有可选参数的URL:

urlpatterns = patterns(
    'my_app.views',
    url('schedule/(?P<calendar_id>\d+)/(?:month(?P<relative_month>[\+,\-]\d)/)$',
    'attribute_event',name='attribute_event')
)

在我的模板中,我有一个链接:
{% url attribute_event calendar.id %}

但是我遇到了错误,说这个url不能通过这些参数进行反向解析。我必须使用两个url正则表达式输入和url名称吗?!

2个回答

6

只有将其拆分为两个URL才有可能实现:

urlpatterns = patterns('my_app.views',
    url('schedule/(?P<calendar_id>\d+)/month(?P<relative_month>[\+,\-]\d)/$',
        'attribute_event', name='attribute_event_relative'),
    url('schedule/(?P<calendar_id>\d+)/)$', 
        'attribute_event', name='attribute_event'),
)    

在模板中:
{% url attribute_event calendar.id %}

or

{% url attribute_event_relative calendar.id '+1' %}

你的看法:

def attribute_event(request, calendar_id, relative_month=None):
    pass

1
非常抱歉,实际上我的错误在于我的正则表达式中,我忘记了“?”作为[-2]字符... 'schedule/(?P<calendar_id>\d+)/(?:month(?P<relative_month>[\+,\-]\d)/)?$' 所以我不需要多个条目。 - christophe31
只要我在模板中指定了所有参数,即使是None,也可以。 - christophe31

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接