所以我正在编写一个分为多个部分的网站,这些部分本身又分为小节。在我的设置中,当用户单击某个部分的链接(例如“/home”)时,他们会被重定向到其中的一个子部分(例如“/home/cover”)。此外,当用户转到页面根目录时,他们会被重定向到其中一个部分(在我的例子中是“/home”)。使用这种设置,当有人进入根目录时会发生什么,他们首先被重定向到“/home”,然后从那里重定向到“/home/cover”。这些重定向是这样实现的:
主要网址.py:
from django.conf.urls import patterns, include, url
from django.views.generic.base import RedirectView
urlpatterns = patterns('',
url(r'^$', RedirectView.as_view(url='/home')),
url(r'^home/', include('components.home.urls', namespace='components.home')),
...
)
组件/主页/urls.py:
from django.conf.urls import patterns, include, url
from django.views.generic.base import RedirectView
from components.home import views
urlpatterns = patterns('',
url(r'^$', RedirectView.as_view(url='cover')),
url(r'^cover$', views.cover, name='home_cover'),
...
)
在实践中,这似乎工作正常:我可以浏览我的网站,并且所有重定向都会做它们应该做的事情。但是,我不知道如何为它们实现单元测试,尤其是对于根重定向。
我最初设计的测试是这样的:
def test_root_url_redirects_to_home_url(self):
response = self.client.get('/')
self.assertRedirects(response, '/home', status_code=301)
但是,当我运行它时,我遇到了错误:
"AssertionError: 301 != 200 : Couldn't retrieve redirection page '/home':
response code was 301 (expected 200)."
现在,我可以轻松地删除所有双重重定向,并使每个重定向的 URL 直接指向其目标,但当前配置感觉更清晰且更易于维护,因此如果有某种方法可以正确测试它,那将是完美的。
一般来说,我对 Django 和 Web 开发非常陌生,所以如果我在这里遗漏了一个明显的答案,我很抱歉。