不是最好的头衔..无论如何: 我有以下URLConf条目:
url(r'^events(?:/(?:(?P<event_id>\d+)|(?P<new>new)))?/?$', EventView.as_view(), name='events')
如您所见,事件后可以不使用额外的路径组件,或者数字或单词“new”。我的问题是尝试从模板中的两个捕获组之一进行反向查找。 Django似乎没有意识到,如果模板url标签被赋予一个参数,那就没关系,因为我的正则表达式说它是一组或另一组。
例如,我想说:
/events/1
我试图这样做:
{% url 'social_network:events' event.id %}
我得到了:
Reverse for 'events' with arguments '(1,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['events(?:/(?:(?P<event_id>\\d+)|(?P<new>new)))?/?$']
我也尝试使用命名参数(event_id = 1)来让参数在字典中传递但仍然是相同的错误。请注意,如果我删除其中一个ORed捕获组,那么它可以很好地解析。
有什么想法吗?
答案 0 :(得分:0)
Django无法反转带有可选捕获组的URL,因为它无法知道放在那里的内容。处理这种情况的最好方法是在urlconf中有多个条目:一个用于no-param版本,一个用于id,一个用new。
你仍然可以让他们都指向同一个视图 - 虽然我必须说,因为这三种情况的行为明显不同,如果你有三个不同的视图,你的代码可能会更清楚。