WordPress サイトを django サイトに変換しています。古い投稿の URL 構造を保持する必要がありますが、新しい投稿の構造は異なります。これを行うには、2 つの URL を作成し、settings.py で日付を設定してから、次のように絶対 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"),
投稿/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 つの URL に対して 1 つのビューを使用しています。
class PostDetail(DetailView):
model = Post
slug_field = 'url_slug'
template_name = "posts/detail.html"
これはすべてうまくいきます。ここで必要なのは、新しい投稿が oldpost_view url によってレンダリングされないようにすることです。「get」をオーバーライドしてこれを逆に使用できることはわかっていますが、リクエストがどのURLから来たかをどのように確認できますか? これを行うための最も効率的で DRY な方法は何ですか?