Vì vậy, tôi đang lập trình một trang web được chia thành các phần, chúng được chia thành các phần con. Trong thiết lập của tôi, khi người dùng nhấp vào liên kết đến một phần (ví dụ: '/ home'), họ được chuyển hướng đến một trong các phần phụ của nó (ví dụ: '/ home/cover'). Ngoài ra, khi người dùng truy cập vào trang gốc, họ được chuyển hướng đến một trong các phần (trong trường hợp của tôi là '/ home'). Với thiết lập đó, điều gì sẽ xảy ra khi ai đó đi vào thư mục gốc, là chúng được chuyển hướng đầu tiên đến '/ home' và từ đó đến '/ home/cover'. Những chuyển hướng được thực hiện như thế này:Django: Kiểm tra chuyển hướng khi URL mục tiêu cũng là một chuyển hướng
urls.py chính:
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')),
...
)
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'),
...
)
Trong thực tế, điều này dường như làm việc tốt: Tôi có thể điều hướng trang web của tôi và tất cả các chuyển hướng đều làm những gì họ nên làm. Tuy nhiên, tôi không thể tìm ra cách để thực hiện các bài kiểm tra đơn vị của mình cho chúng, và đặc biệt cho việc chuyển hướng gốc.
Các thử nghiệm tôi thiết kế ban đầu được như:
def test_root_url_redirects_to_home_url(self):
response = self.client.get('/')
self.assertRedirects(response, '/home', status_code=301)
Tuy nhiên, khi tôi chạy nó, tôi đang phải đối mặt với các lỗi:
"AssertionError: 301 != 200 : Couldn't retrieve redirection page '/home':
response code was 301 (expected 200)."
Bây giờ, tôi có thể dễ dàng loại bỏ tất cả các chuyển hướng đôi và làm cho mọi URL được chuyển hướng trực tiếp đến đích của nó, nhưng cấu hình hiện tại cảm thấy sạch hơn và dễ bảo trì hơn, vì vậy nếu có cách nào đó tôi có thể kiểm tra nó đúng cách sẽ hoàn hảo.
Tôi rất mới với Django và phát triển web nói chung, vì vậy tôi xin lỗi nếu tôi thiếu câu trả lời rõ ràng ở đây.
Thử nghiệm đã làm việc tốt với việc thêm 'target_status_code = 301'. Cảm ơn rất nhiều! – Ninethousand
@Ninethousand không có vấn đề gì, nếu câu trả lời của tôi trả lời câu hỏi của bạn, vui lòng đánh dấu câu trả lời đó là câu trả lời đúng và cập nhật. Cảm ơn! – bouke
Được đánh dấu đúng, nhưng tôi đã đăng ký gần đây nên tôi chưa được phép upvote. Tôi sẽ quay lại sau khi tôi có thể. – Ninethousand