为什么Django在反转URL时不使用我的根URLconf中的前缀?

时间:2012-03-07 03:07:19

标签: django url reverse

假设我有一个看起来像这样的Django项目:

- project
   - urls.py
   - items
      - urls.py
      - views.py

root URLconf如下所示:

urlpatterns = patterns('',
    url(r'^(?:items/)?$', include('items.urls')),
)

项目的URLconf如下所示:

urlpatterns = patterns('items.views',
    url(r'^(?P<item_id>\d+)/$', 'view'),
)

views.py包含一个方法:

def view(request, item_id):
    item = get_object_or_404(Item, pk=item_id)
    return render(request, 'item/view.html', {'item': item})

我正在尝试在Django的交互式shell中使用django.core.urlresolvers.reverse,但它无效:

>>> reverse('items.views.view', kwargs={'item_id': 12})
'/12/'

问题是反向的URL缺少根URLconf的items/前缀。我做错了什么?

1 个答案:

答案 0 :(得分:1)

事实证明我做的事情是愚蠢的:


url(r'^(?:items/)?$', include('items.urls')),

因为'items'是可选的,reverse方法只是忽略它并输出'/'。