2017-08-08 65 views
0

我正在尝试为我的DJANGO网站创建一些漂亮的固定链接。特别是对于一个产品页面,我希望它出现在browswer产品/产品称号Django REGEX - 如何在URL中替换%20?

,所以如果我有一个产品用的标题是“免费$ 20优惠券凡购买”

的永久链接会显示为产品/自由$ 20美元的优惠券与购

我的网址如下:

url(r'^(?P<slug>.*)/$', product_by_detail, name='product_detail') 

,但在浏览器的URL被显示为

亲导航/免费%20 $ 20%20Salad%20Coupon%20With%20购买

我知道%20代表的空间,但有什么我可以在正则表达式中用' - '字符替换%20吗?

+1

浏览器URL与Django无关,只是基于你如何在地址栏中输入内容。如果你想用Django来处理这个问题,那么当用户去那个网站时,你必须发出一个重定向到一个类似的URL,而不是空格。 –

+0

好吧,这不是URL模式中的正则表达式的工作。这只是确定哪些字符是*预期*。您需要首先在任何模板代码生成指向该URL的链接时解决此问题。 –

+0

好吧 - 所以我想也许在视图中,我有哪些生成模板,我需要去掉那里的空间? –

回答

0

处理此问题的最佳方法是使用SlugField为模型生成实际的slu slu。如果里面有空间,它不是一个slu!!

你的模型:

class Product(models.Model): 
    slug = models.SlugField() 

如果你在管理面板中加入这些项目,你可以使用prepopulated_fields属性ModelAdmin的生成蛞蝓作为用户类型:

class ProductAdmin(admin.ModelAdmin): 
    prepopulated_fields = {"slug": ("title",)} 

这将从用户键入的title创建一个子弹。

注意:SlugField也可能会去掉$字符。