如何在Django URL中处理&符号?

时间:2012-11-03 20:01:06

标签: python django url django-urls

我有一个Django站点,它使用项目名称来创建查看器友好的URL。例如:

/item/DeluxeWidget/

我有一个名称中带有&符号的项目:

/item/Red & Blue Widget/

&符号抛出了一些东西。如果我使用{{widget.name | fix_ampersands}},&符号将被转义为&,但仍未在网址格式中获取:

url(r"^widget/(?P<name>[0-9a-zA-Z&,. -]+)/$", 'site.views.widget' ),

在视图中,我使用捕获的名称来执行

Widget.objects.get(name=name)

在URL中处理&符的转义,模式或过滤器的正确组合是什么?我也期望在其中遇到带撇号的名字。我有什么办法可以处理这些吗?

2 个答案:

答案 0 :(得分:8)

考虑使用SlugField,它可以自动填充适用于网址的其他字段的清理版本。

答案 1 :(得分:4)

一般来说,你最好不要这样做,并遵循一种SO模式 - 让我们使用这个页面作为例子(http://stackoverflow.com/questions/13212960/how-do-i-handle-ampersands-in-django-urls

然后你可以这样做:

url(r"^widget/(?P<widget_id>[0-9]+)/(?P<widget_name>(.*?)/$", 'site.views.widget' ),

然后:

  • {{ widget.name|fix_ampersands }}变为{{ widget.name|slugify }}
  • Widget.objects.get(name=name)变为Widget.objects.get(pk=widget_id)