我有这些类型的网址:
/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
这样的网址将无效,这比没有斜线的情况更糟糕。
答案 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
)都可以相同。