3

アイテム名を使用して視聴者にわかりやすいURLを作成するDjangoサイトがあります。例えば:

/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

URLでの使用に適した別のフィールドのクリーンアップされたバージョンを自動的に入力できるSlugFieldの使用を検討してください。

于 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 に答える