3

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

/item/DeluxeWidget/

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

/item/Red & Blue Widget/

& 号把东西扔掉了。如果我使用 {{ widget.name|fix_ampersands }},与号将被转义为&但它仍然没有在 URL 模式中被拾取:

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

在视图中我使用捕获的名称来做

Widget.objects.get(name=name)

什么是转义、模式或过滤器的正确组合来处理 URL 中的 & 符号?我也希望遇到带有撇号的名字。我也应该做些什么来处理这些吗?

4

2 回答 2

8

考虑使用SlugField,它可以自动填充另一个适合在 URL 中使用的字段的清理版本。

于 2012-11-03T20:44:28.113 回答
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)
于 2012-11-03T20:40:14.180 回答