擅长:python、mysql、java
<pre><code># views
def detail(request, object_id, slug):
obj = get_object_or_404(MyModel, pk=object_id)
if obj.slug != slug:
canonical = obj.get_absolute_url()
return redirect(canonical)
context = {"obj":obj}
return render(request, "myapp/detail.html", context)
# urls
from myapp.views import detail
urlpatterns = ('',
#...
url(r'^(?P<object_id>\d+)/(<?P<slug>\S+)/$', detail, name="detail")
url(r'^(\d+)/$', lambda request, pk: detail(request, pk, None), name="redirect-to-detail"),
# ...
)
# models
class MyModel(models.Model):
def get_absolute_url(self):
return reverse(
"detail",
kwargs=dict(object_id=self.id, slug=self.slug)
)
@property
def slug(self):
return slugify(self.title)
</code></pre>