如何让django自动替换带下划线的URL中的空格?

时间:2014-03-11 22:39:57

标签: python django url

我使用Django构建网站。我希望我的网址看起来像:example.com/product/product_name_goes_here,下划线将名称中的单词分开。在数据库中,某些产品名称中包含空格,因此网址目前看起来像example.com/product/product name goes here。一切正常,但我想在我的网址中没有空格。

推荐的方法似乎依赖于将这些知识放在代码中的很多地方。因此urls.py将包含以下内容:

url(r'^product/(?P<product_name>.+)$', views.product)

然后,views.py将包含:

def product(request, product_name):
    real_product_name = product_name.replace("_", " ")
    #do things with real_product_name

如果我需要reverse lookup的网址,我需要执行以下操作:

url = reverse(myapp.views.product, product.name.replace(" ", "_"))

在模板中,我将write a custom filter [1]用下划线替换空格,然后按如下方式包含网址:

{% url myapp.views.product product.name|spaces_to_underscores %}

除非它非常容易出错,否则一切正常。如果我忘了,一次,我需要这样做,我会有一个糟糕的网址,或者一个破坏的视图。

有没有办法告诉Django url调度程序我总是希望url [2]的产品名称部分中的空格是下划线?这样,我可以只使用产品名称进行反向网址查找,它会自动用下划线替换空格,我不必在模板中的{% url %}标签中使用任何过滤器,我不会&# 39; t必须记住在每个视图函数中用空格替换下划线。

[1]我知道slugify。这对我们没有帮助;我不想破折号,此外,我仍然必须记住在任何地方使用它。

[2]执行此操作的稍微不太优选的方法是,如果网址中的所有空格都更改为下划线。它适用于我当前的网站设计,但我只想更改产品名称中的空格。

0 个答案:

没有答案