我正在将 WordPress 网站转换为 django 网站。我需要为旧帖子保留 url 结构,但对新帖子有不同的结构。我通过创建 2 个 url,在 settings.py 中设置日期,然后像这样设置绝对 url 来做到这一点:
网址.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"),
帖子/模型.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 使用一个视图:
class PostDetail(DetailView):
model = Post
slug_field = 'url_slug'
template_name = "posts/detail.html"
这一切都很好。现在,我需要防止 oldpost_view url 呈现新帖子,反之亦然。我知道我可以覆盖“get”并为此使用反向,但我如何判断请求来自哪个 url?最有效和最干燥的方法是什么?