Tôi đang viết một thẻ tùy chỉnh ở Django nên xuất một giá trị được lưu trữ trong một phiên người dùng, nhưng tôi không thể tìm cách truy cập đối tượng phiên từ bên trong một chức năng thẻ tùy chỉnh. Có cách nào để làm điều này, mà không cần gán thủ công đối tượng phiên cho biến ngữ cảnh?Trong Django, có thể truy cập phiên người dùng hiện tại từ trong thẻ tùy chỉnh không?
Trả lời
Bạn sẽ có thể thêm bộ xử lý yêu cầu bối cảnh trong tập tin settings.py của bạn:
TEMPLATE_CONTEXT_PROCESSORS = ("django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
'django.core.context_processors.request',)
Điều này sẽ thực hiện tương tự như câu trả lời hiện tại mà không phải thêm tệp tùy chỉnh.
Bạn có thể làm điều này với bộ vi xử lý bối cảnh tùy chỉnh (xem http://docs.djangoproject.com/en/dev/ref/templates/api/)
Trong trường hợp này, bạn muốn tạo một file mới có tên gọi context_processors.py ở mức tương tự như tập tin settings.py của bạn, bao gồm:
def add_session(request):
return {'session': request.session}
Sau đó, trong tập tin settings.py của bạn, thêm:
TEMPLATE_CONTEXT_PROCESSORS = ("django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
'context_processors.add_session',)
Bây giờ bạn sẽ có thể tham khảo nội dung [ 'phiên'] trong thẻ tùy chỉnh của bạn.
Lưu ý rằng điều này sẽ chỉ làm việc cho các mẫu diễn tả với một RequestContext được giao, như trong đoạn mã sau:
def test(request):
return render_to_response('test.html',{}, context_instance=RequestContext(request))
Tôi thấy điều này rất hữu ích: http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser
Bạn có thể sử dụng trung gian để lấy thông tin người dùng và lưu nó với một sợi địa phương, và sau đó sử dụng nó với định nghĩa thẻ của mình.
Không có hành vi phạm tội nào mà Sebastian có vẻ như là một hack hữu ích tại một thời điểm, nhưng đủ kỳ lạ vào ngày 24 tháng 12 trong một mục blog về truy cập dữ liệu Người dùng trong Quản trị viên, James Bennett, người quản lý phát hành của Django. about using the threadlocal hack:
Tuyên bố từ chối trách nhiệm chất béo lớn: có rất nhiều công dụng tiềm năng cho các loại tính năng này. Nhiều người trong số họ sai và ngu ngốc và bạn không nên thử họ. ... Ngoài ra, đôi khi bạn sẽ thấy ai đó đề xuất rằng các tính năng này có thể thu được bằng những gì được gọi là "hack luồng chủ đề"; điều này về cơ bản liên quan đến request.user gắn bó vào một loại biến có sẵn trên toàn cầu, và là một điều rất tệ để sử dụng nếu bạn không biết mình đang làm gì. Nó cũng thường là một điều rất tồi tệ để sử dụng ngay cả khi bạn biết bạn đang làm gì, vì bạn có thể chỉ làm điều đó vì bạn lười biếng và không cảm thấy muốn đảm bảo bạn truyền thông tin đúng cách. Vì vậy, nếu bạn thấy ai đó cho rằng bạn làm điều này bằng cách sử dụng "threadlocal", hãy bỏ qua người đó.
Không nói rằng bạn nên bỏ qua Sebastian, nhưng nó có thể đáng giá theo đuổi các con đường khác thay vì sử dụng threadlocal mà không được coi là thực hành tốt nhất.
Đó là một điểm quan trọng nhưng tôi phải gợi ý rằng có lẽ bình luận của ông Bennett đối với các lập trình viên có lẽ là" lười biếng và không cảm thấy thích đảm bảo bạn truyền thông tin đúng cách ". hội chợ. Một vấn đề tái xuất hiện ở Django là tìm ra cách để truyền thông tin xung quanh đúng cách. Thông thường nó không phải là về lười biếng mà là về việc truy cập vào các biến bạn cần, ở tất cả. Mà nói; anh ấy rõ ràng là đúng, rằng việc hack threadlocal là một điều rất xấu. – Teekin
Sử dụng render_to trang trí từ django-annoying có vẻ là lựa chọn tốt nhất (như đã thấy trong another question on stackoverflow)
- 1. Không thể tạo siêu người dùng với mô hình người dùng tùy chỉnh trong Django 1,5
- 2. Django 1.5: Truy cập các trường mô hình người dùng tùy chỉnh trong models.py
- 3. Có thể tùy chỉnh bộ lọc truy cập Django request.user không?
- 4. Truy cập "lớp hiện tại" từ tùy chỉnh WPF MarkupExtension
- 5. Thêm trường tùy chỉnh cho người dùng trong django
- 6. django: cách truy cập người dùng yêu cầu hiện tại trong ModelForm?
- 7. mô hình người dùng tùy chỉnh trong django 1.5
- 8. Truy cập bị từ chối mạo danh thư mục mạng truy cập người dùng hiện tại
- 9. Người dùng hiện tại trong Magento?
- 10. Chèn Thẻ Tùy chỉnh vào Lựa chọn Người dùng
- 11. Tôi có thể gọi thẻ tùy chỉnh trong cfscript không?
- 12. Nhận quyền truy cập vào trang cái tùy chỉnh từ điều khiển người dùng
- 13. Bộ xử lý ngữ cảnh Django: Có thể truy cập ngữ cảnh hiện tại trong ContextProcessor không?
- 14. Tomcat: cách truy cập (phiên) Người quản lý từ servlet
- 15. Kiểm tra quyền truy cập của người dùng bằng các thuộc tính tùy chỉnh
- 16. Tôi có thể thay đổi USERNAME_FIELD trong Django 1.5 mà không cần tạo người dùng tùy chỉnh không?
- 17. Thêm quyền tùy chỉnh cho Người dùng
- 18. Tôi có thể phát hiện khi người dùng truy cập trang bằng nút quay lại không?
- 19. Mô hình người dùng tùy chỉnh Django và usermanager
- 20. Không thể đăng nhập vào django admin sau khi tạo người dùng siêu với mô hình người dùng tùy chỉnh
- 21. ASP.NET MVC tìm tên người dùng hiện tại trong bộ lọc tác vụ tùy chỉnh
- 22. Truy cập phiên trong Mẫu
- 23. Tôi có thể truy cập Lớp .NET Tùy chỉnh của tôi từ PowerShell không?
- 24. cách truy cập yêu cầu trong phụ trợ xác thực tùy chỉnh django?
- 25. Tùy chỉnh Wordpress Kiểu người dùng
- 26. Làm cách nào để thực hiện một cuộc khảo sát người dùng có thể tùy chỉnh ở Django
- 27. Truy cập đối tượng Yêu cầu từ các thẻ JSP tùy chỉnh
- 28. Bạn có thể tạo thẻ mẫu tùy chỉnh trả về bộ truy vấn không? Nếu có, làm thế nào? - Django
- 29. Tại sao Session.Evict trong OnPostUpdate gây ra ngoại lệ "Có thể nonthreadsafe truy cập vào phiên"?
- 30. đánh dấu tùy chỉnh trong mục nhập của người dùng
tôi khuyên bạn nên chuyển đổi câu trả lời cho cách tiếp cận này, nó sạch hơn. –
Tôi đã có bộ tiền xử lý đó, nhưng phải bỏ qua thuộc tính phiên. D'oh! Cảm ơn. – knabar
Tôi đã thêm điều này, nhưng làm cách nào để truy cập yêu cầu từ bên trong mẫu? context.session không tồn tại. – Wouter