我正在将一个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评论的数百万。 –