我正在將一個WordPress站點轉換爲一個Django。我需要保留舊帖子的網址結構,但對於新帖子有不同的結構。使用基於類的通用視圖將多個URL特殊處理爲一個視圖
urls.py
url(r'^reviews/archives/(?P<pk>\d+)$', PostDetail.as_view(), name="oldpost_view"),
帖子/ urls.py
url(r'^(?P<slug>[-\w]+)$', PostDetail.as_view(), name="post_view"),
:我創建了2個網址,settings.py中設置一個日期,然後設置絕對URL像這樣做到了這一點
帖/ models.py
@property
def is_old_post(self):
wp_date = settings.WP_ARCHIVE_DATE
if self.post_date.date() < wp_date:
return True
# return False
@models.permalink
def get_abs_url(self):
if self.is_old_post:
return ('oldpost_view',(), {
'pk': self.id,
}
)
else:
return ('post_view', [str(self.url_slug)])
我使用一個視圖爲2個網址:
class PostDetail(DetailView):
model = Post
slug_field = 'url_slug'
template_name = "posts/detail.html"
這一切都很好。現在,我需要的是防止新帖被oldpost_view url渲染,反之亦然。我知道我可以覆蓋「get」並使用reverse,但是我怎麼知道請求來自哪個url?什麼是最有效和乾燥的方式來做到這一點?
首先,你說你的網址鏈接到相同的視圖,然後你說不同類型的網址應該由不同的視圖呈現。所以答案很明顯。只是用不同的觀點來處理它們。 – akonsu
你真正想要做的是從舊的到新的重定向。您不需要兩個相同內容的網址。如果你做永久重定向(301狀態碼),幾乎每個客戶都會認識到這一點。 –
+ Issac評論的數百萬。 –