2012-02-15 36 views
5

Tôi đang cố chuyển hướng trang gốc Django tới bảng điều khiển quản trị Django, và tôi chủ yếu là đã thiết lập và chạy nó. Tuy nhiên, tôi đã nhận thấy rằng trừ khi có dấu gạch chéo ở URL dự án, các liên kết trên trang không bao gồm thư mục dự án và thay vào đó tìm cách tìm ứng dụng trong thư mục gốc của trang web.Chuyển hướng gốc Django sang bảng quản trị

Vì vậy, giả sử tôi có dự án foo và một ứng dụng bar. Nếu bạn truy cập http://server/foo/ (có dấu gạch chéo), mọi thứ đều hoạt động tốt và các liên kết trên trang sẽ chuyển đến http://server/foo/bar. Tuy nhiên, nếu một lượt truy cập http://server/foo, các liên kết được tạo sẽ chuyển sang http://server/bar thay vào đó, sẽ tạo ra lỗi 404.

Nếu tôi đặt WSGIScriptAlias để trỏ đến /foo/ thay vì /foo, nó sẽ phát ra lỗi 404 nếu tôi điều hướng đến /foo. Tôi đã cố gắng để buộc một dấu gạch chéo sau trong conf Apache với Redirect, nhưng tôi sẽ tạo ra một chuyển hướng đệ quy (http://server/foo//////...). Tôi chưa thử sử dụng một tập tin .htaccess, nhưng tôi nghi ngờ điều tương tự có thể xảy ra.

tôi đã cố gắng điều tương tự trong urls.py, tuy nhiên:

url(r'^$', redirect_to, {'url': '/'}), # goes to server root http://server/ 
url(r'^$', redirect_to, {'url': 'foo/'}), # goes to http://server/foo/foo 
url(r'^$', redirect_to, {'url': '/foo/'}), # infinite redirect 

Tôi cũng đã thử cách gắn thêm một dấu gạch chéo tất cả các url Django như vậy:

url(r'^(.*)/', include(admin.site.urls)) 

Nhưng nó không phù hợp với bất cứ điều gì tất cả trong thư mục gốc của dự án (mặc dù nếu bạn điều hướng đến ứng dụng, điều đó dường như hoạt động OK).

Tôi đang sử dụng Apache 2.2 với mod_wsgi, đây là cấu hình:

Alias /static "C:/DJANGO~1/apps/django/django/contrib" 

<Directory 'C:/DJANGO~1/apps/django/django/contrib'> 
    Order allow,deny 
    Allow from all 
</Directory> 

WSGIScriptAlias /foo "C:/Djangostack/apps/django/scripts/django.wsgi" 

<Directory 'C:/Djangostack/apps/django/scripts'> 
    Order allow,deny 
    Allow from all 
</Directory> 

Và đây là urls.py mà chủ yếu hoạt động:

urlpatterns = patterns('', 
    url(r'^', include(admin.site.urls)), 
) 

Tôi đã thực hiện chắc chắn APPEND_SLASH được thiết lập để Đúng, nhưng nó dường như không hoạt động trong thư mục gốc của dự án.

+0

Tại sao '/ foo' được chuyển hướng đến'/bar'? Chuyển hướng này xảy ra ở đâu? –

+0

Nó không thực sự '/ foo' được chuyển hướng đến'/bar' - thay vào đó, các url được tạo trên trang chuyển đến '/ bar' thay vì'/foo/bar'. – Hannele

Trả lời

1

Thử đặt APPEND_SLASH thành True trong số settings.py của bạn. Tôi đã có một vấn đề tương tự và điều này cố định nó cho tôi. Nó được cho là mặc định là True nhưng tôi phải đặt nó một cách rõ ràng.

+0

Thật không may là không giúp được gì - nó hoạt động ở khắp mọi nơi _but_ gốc của dự án. – Hannele

+0

'Urls.py' nào không hoạt động với? Lưu ý rằng nó sẽ chỉ nối thêm dấu gạch chéo nếu url không khớp với mẫu * mà không * dấu gạch chéo. – aganders3

+0

Tôi đã thử nó với 'r '^'', 'r '^ (. *) /'', Và 'r '^ (. *)/$'', Vẫn không có may mắn. Tôi nghi ngờ rằng có nghĩa là cấu hình cần phải xảy ra trong Apache, hoặc trong một số thiết lập Django toàn hệ thống khác. – Hannele

Các vấn đề liên quan