2013-07-23 33 views
5

Tôi đang sử dụng i18n_patterns để quốc tế hóa ứng dụng của mình và hoạt động ngoại trừ khi tôi nhấp vào liên kết yêu cầu đăng nhập (chế độ xem được bảo vệ bởi @login_required decorator), tôi đang được chuyển hướng đến biểu mẫu đăng nhập ngôn ngữ mặc định thay vì ngôn ngữ hiện đang hoạt động.@login_required đang mất ngôn ngữ được chỉ định hiện tại

Làm cách nào để bảo vệ URL hoạt động? Nói cách khác, khi trong phần Pháp, tôi muốn @login_required để chuyển hướng tôi /fr/login/?next=/fr/clients/ thay vì /en/login/?next=/fr/clients/

Trả lời

0

Tôi không thông thạo trong i18n cho Django, nhưng tôi không nghĩ rằng đây là thực sự có thể vì login_required liên kết của nó login_url tham số cho chức năng được trang trí tại điểm ứng dụng trang trí. Bạn có lẽ tốt hơn khi viết trang trí của riêng bạn; giả sử bạn không sử dụng một trong các thông số tùy chọn để login_required, bạn có thể làm của riêng bạn như

from django.contrib.auth.views import redirect_to_login 
from django.core.urlresolvers import reverse 
import functools 

def login_required(fn): 
    @functools.wraps(fn) 
    def _decorated(request, *args, **kwargs): 
     if request.user.is_authenticated(): 
      return fn(request, *args, **kwargs) 

     path = request.get_full_path() 
     login_url = reverse('login') 
     return redirect_to_login(path, login_url) 

nơi đảo ngược ('login') được bất cứ điều gì tên của view đăng nhập của bạn trong urls.py của bạn.

Tôi chưa thử nghiệm điều này, nhưng nếu có điều gì đó xảy ra, tôi sẽ cố gắng gỡ lỗi nó theo khả năng tốt nhất của tôi.

2

tôi đã cùng một vấn đề, và tôi giải quyết nó bằng cách chỉnh sửa settings.py:

LOGIN_URL = reverse_lazy('login') 

Chức năng reverse_lazy thêm tiền tố ngôn ngữ chính xác trên URL! (với 'đăng nhập' là tên của tuyến đường đăng nhập của bạn)

+0

Đây phải là câu trả lời được chấp nhận. –

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