2010-08-31 34 views
7

Tôi đang sử dụng chế độ xem chung của django, làm cách nào để có quyền truy cập vào yêu cầu trong mẫu của tôi.Django Generic View - Truy cập theo yêu cầu

URL:

file_objects = { 
    'queryset' : File.objects.filter(is_good=True), 
} 
urlpatterns = patterns('', 
    (r'^files/', 'django.views.generic.list_detail.object_list', dict(file_objects, template_name='files.html')), 
) 

Trả lời

9

Sau khi một số tìm kiếm hơn, trong khi chờ đợi vào người để trả lời này. Tôi tìm thấy:

Bạn cần phải thêm này để settings.py của bạn

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request', 
) 

Điều này có nghĩa rằng theo mặc định theo yêu cầu sẽ được chuyển đến tất cả các mẫu!

+3

Không đúng sự thật - nó sẽ được chuyển đến tất cả các mẫu được trả lại bằng một 'RequestContext', mà tất cả quan điểm chung là. –

+0

Điều này đã không làm việc cho tôi, bằng cách sử dụng Django 1,7 bốn năm rưỡi sau đó. Trên thực tế, 1,7 tài liệu có cảnh báo ở đầu https://docs.djangoproject.com/en/1.7/ref/settings/ - "Hãy cẩn thận khi bạn ghi đè cài đặt, đặc biệt khi giá trị mặc định là một bộ trống không trống hoặc từ điển, chẳng hạn như MIDDLEWARE_CLASSES và TEMPLATE_CONTEXT_PROCESSORS. Hãy chắc chắn rằng bạn giữ các thành phần theo yêu cầu của các tính năng của Django bạn muốn sử dụng. " Tuy nhiên, hãy xem tại đây để biết giải pháp: http://stackoverflow.com/questions/9899113/get-request-session-from-a-class-based-generic-view – Chirael

1

gì làm việc cho tôi là để thêm:

TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth", 
          "django.core.context_processors.request", 
          ) 

Đối với các settings.py không đến urls.py

3

Không ai trong số các câu trả lời cho vấn đề giải quyết của tôi, vì vậy đối với những người khác vấp khi điều này muốn quyền truy cập vào đối tượng yêu cầu trong mẫu xem chung, bạn có thể làm điều gì đó như thế này trong url của bạn:

from django.views.generic import ListView 

class ReqListView(ListView): 
    def get_context_data(self, **kwargs): 
     # Call the base implementation first to get a context 
     c = super(ReqListView, self).get_context_data(**kwargs) 
     # add the request to the context 
     c.update({ 'request': self.request }) 
     return c 

url(r'^yourpage/$', 
    ReqListView.as_view(
     # your options 
    ) 
) 

Chúc mừng!

3

Thử sử dụng phương thức get_queryset.

def get_queryset(self): 
    return Post.objects.filter(author=self.request.user) 

xem liên kết (hy vọng nó giúp): - See Greg Aker's page...

+0

tuyệt vời! Điều này là rất xấu tài liệu trong Django. Tôi chính xác cần obj yêu cầu. trong lớp con Listview. – Timo

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