2012-11-03 99 views
2

我有一個Django網站,它使用項目名稱來創建適合瀏覽器的網址。例如:如何處理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中處理&符號的轉義,模式或過濾器的正確組合是什麼?我也希望在其中使用帶撇號的名字。我還有什麼要處理這些嗎?

+0

所以簡短的回答是「不要」。無論如何,&符號都不屬於URL。感謝您的建議 - SlugField似乎是我嘗試做的理想工具。 –

回答

8

考慮使用SlugField能夠自動填充有適合於在網址使用另一個字段的清理版本。

+0

是的 - 可能更簡單的OP而不是改變URL結構+1 –

4

一般來說,你最好不這樣做,並按照這麼樣的模式 - 讓我們用這個頁面爲例(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)