2009-08-18 29 views
18

Tôi có một urls.py với dòng này:Thẻ mẫu Django: Cách gửi next_page trong {url auth_logout}?

url(r'^logout/$', 'django.contrib.auth.views.logout', name="auth_logout"), 

Trong mẫu thẻ của tôi có dòng này:

<a href="{% url auth_logout %}">Logout</a> 

Bây giờ, tôi muốn thêm param next_page đến templatetag url, nhưng tôi không thể làm cho nó hoạt động được. Tôi đã cố gắng này:

{% url auth_logout request.path %}" 

... và điều này:

{% url auth_logout request,request.path %} 

Nhưng không ai trong số họ làm việc. Làm thế nào tôi có thể cung cấp chức năng với tham số next_page tùy chọn bằng cách sử dụng templatetag url?

Cảm ơn!

Trả lời

25

Hai điều:

  1. django.contrib.auth.views.logout() có một next_page tùy chọn mà bạn không được cung cấp
  2. url templatetag đã lập luận bằng dấu phẩy

Vì vậy, , trước tiên, hãy sửa đổi url để chấp nhận next_page URLConf của bạn cần sửa đổi để chuyển sang trang tiếp theo, một cái gì đó như thế này cho chuyển hướng được mã hóa cứng:

url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}, name='auth_logout'), 

và một kết quả tham số:

url(r'^logout/(?P<next_page>.*)/$', 'django.contrib.auth.views.logout', name='auth_logout_next'), 

Và sau đó sửa đổi mẫu của bạn để vượt qua trong next_page

<a href="{% url auth_logout_next /some/location %}">Logout</a> 
+0

Điều đó gần như không có mẹo! Có hai dòng trong urls.py giải quyết nó, nhưng sẽ trả về trang mặc định mặc định của django khi vừa nhập/đăng xuất /. Thêm {'next_page': '/'} như bạn đề xuất làm cho chuyển hướng đi/trong mọi trường hợp, ngay cả khi được chỉ định tiếp theo. Xem mã nguồn để đăng xuất giải thích hành vi đó. Vì vậy, nó xuất hiện, một tham số được sử dụng bởi thẻ mẫu, nhưng mã hóa cứng được sử dụng khi liên kết được thực sự nhấp? –

25

Đối với những gì nó có giá trị, tôi sử dụng này:

<a href="{% url auth_logout %}?next=/">Logout</a> 
+0

Điều đó có hiệu quả đối với tôi, ngoại trừ tôi đã bỏ dấu ngoặc kép: Steve

+2

Đây là giải pháp đơn giản nhất. Tôi không hiểu tại sao mọi người lại đưa ra giải pháp yêu cầu thêm các mẫu url chuyên dụng ... – Cerin

+0

@Cerin có thể vì việc viết mã cứng không phải là một thực hành tốt. – Amyth

6

Sander Smits có giải pháp dễ dàng nhất. Trong trường hợp bạn sử dụng:

<a href="{% url "auth_logout" %}?next={{ request.path|urlencode }}">Logout</a> 

Và trong một trường hợp tổng quát hơn, sử dụng:

<a href="{% url "auth_logout" %}?next={% url "my_url" my_params |urlencode %}">Logout</a> 
0

Nếu bất cứ ai muốn đưa ra một liên kết HTML thông qua xác nhận lỗi views.py với mark_safe và bản dịch.

Tôi đã sử dụng phần này để đăng xuất người dùng và sau đó gửi anh ta đến trang khôi phục mật khẩu.

mark_safe(_("Error message") + '<a href="' + reverse('logout') + '?next=' + reverse('password_recover') + '">' + ugettext("Forgot password?") + '</a>') 
Các vấn đề liên quan