我試圖配置我的應用程序的路由,以便通過pk查找適當的視圖頁面,並且它返回具有正確的slug後面的正確url的重定向。如何使用pk執行視圖查找,然後使用正確的slug重定向到url? (Django)
例如,我有模型Post
與title
和slug
字段。比方說,我有一個Post
對象與pk 1
和slug hello-world
。我想發生的是,你將被重定向到/post/1/hello-world/
,我是否導航到:
/post/1/
/post/1/hello-world/
,或/post/1/wrong-slug/
我之所以想(a)仍然返回正確的視圖,並且(b)重定向到更新的/正確的url(又名),如果我碰巧更新這個帖子的slu to到hello-world-revised
,則/post/1/hello-world/
將)。
我有這個在我的應用程序的urls.py
:
urlpatterns = patterns('',
...
url(r'^(?P<post_id>\d+)(?:/(?P<slug>[\w\d-]+))?/$', views.post, name='blog-post'),
)
而且在views.py
:
def post(request, post_id, slug):
post = get_object_or_404(Post, pk=post_id)
return render(request, 'blog/post.html', {'post': post})
這讓我上文(a)(檢索正確的觀點),而不是(B)。爲了嘗試和實現(b)中,我曾嘗試:
在我的崗位視圖執行重定向:
def post(request, post_id, slug): post = get_object_or_404(Post, pk=post_id) return redirect('blog-post', post.id, post.slug)
但是,當我瀏覽到任何崗位,我得到了「此網頁有重定向循環「錯誤。
重寫
get_absolute_url
方法對我Post
模型(按照this question中描述的圖案):class Post(models.Model): ... @models.permalink def get_absolute_url(self): kwargs = { 'post_id': str(self.id), 'slug': self.slug, ) return ('blog-post',(), kwargs)
但是,這並沒有任何影響;返回正確的視圖,但該URL保持爲您最初輸入的內容。
有誰知道如何得到這個工作?
呃,是的。漫長的一天很漫長。謝謝 :) – 3cheesewheel