【问题标题】:Append a slugyfied field based on unique id to an URL in Django将基于唯一 id 的 slugyfied 字段附加到 Django 中的 URL
【发布时间】:2011-10-06 20:28:09
【问题描述】:

有人输入www.example.com/3/

我有一个带有 charfield 的模型,我可以进行 slugify。

class Mymodel(models.Model):
    title = models.CharField(max_length=200)

如何在 Django 中将 url 重写为 www.example.com/3/title-of-selected-id

我是在 urls.py 还是在 views.py 中做呢?我能想到的就是制作两个这样的模式

(r'^mymodels/(?P<mymodel_id>\d+)/(?P<name_slug>[\w-]+)$', 'app.views.detail'),
(r'^mymodels/(?P<mymodel_id>\d+)/$', 'app.views.rewrite'),

然后在我的 app.views.rewrite 中,我将获得 mymodel 标题,对其进行 slugify 并重定向到第一个 url。但这似乎非常肮脏

【问题讨论】:

    标签: django url url-rewriting django-urls


    【解决方案1】:

    通过#django irc,有人告诉我重定向方法还不错,我们想不出另一种简单的方法,所以我只是编写了一些似乎可行的方法。

    #urls.py
    (r'^mymodels/(?P<mymodel_id>\d+)/$', 'app.views.detail'),
    (r'^mymodels/(?P<mymodel_id>\d+)/(?P<name_slug>[\w-]+)/$', 'app.views.detail'),
    
    #views.py
    def detail(request, mymodel_id, name_slug=None):
        mymodel = get_object_or_404(Mymodel, pk=mymodel_id)
    
        slug = slugify(mymodel.title)
    
        if slug == name_slug:
            return HttpResponse("model number %s." % mymodel_id)
        else:
            return redirect(reverse('app.views.detail', args=[mymodel_id, slug]), permanent=True)
    

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2017-09-18
      • 2023-04-03
      相关资源
      最近更新 更多