Django具有相同名称但不同的正则表达式

时间:2011-11-01 13:54:34

标签: django url reverse

我有这些类型的网址:

/city/  
/city/category/  
/city/category/subcategory/ 

所有网址都由一个视图处理。有没有办法为这些网址使用相同的名称,以便随后使用这些标记:

{% url 'city_index' city.slug %}
{% url 'city_index' city.slug category.slug %}
{% url 'city_index' city.slug category.slug subcategory.slug %}

我试过了:

url(r'^(?P<city_slug>[\w\-]+)/$',
    'real_city_index',
    name='city_index'
),
url(r'^(?P<city_slug>[\w\-]+)/(?P<category_slug>[\w\-]*)/{0,1}$',
    'real_city_index',
    name='city_index'
),

但是在这种情况下,第二个url反向返回url而没有尾随斜杠。

如果你不写/{0,1},那么像/city/category这样的网址将无效,这比没有斜线的情况更糟糕。

2 个答案:

答案 0 :(得分:4)

有充分理由不称他们为'city_index','city_index_with_category'和'city_index_with_sub_category'?

答案 1 :(得分:1)

Django为此named URL patterns。您的代码存在的问题是您对所有网址city_index属性使用name。将这些更改为name='city_index'name='city_category'name='city_subcategory',一切都应该正常。所有网址格式的视图名称(real_city_index)都可以相同。