Django Generic View - Доступ к запросу

Я использую общие представления django, как мне получить доступ к запросу в моем шаблоне.

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')),
)

person Mark    schedule 31.08.2010    source источник


Ответы (4)


После еще нескольких поисков, пока люди ждут ответа на это. Я нашел:

Вам нужно добавить это в свой settings.py

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

Это означает, что по умолчанию запрос будет передан всем шаблонам!

person Mark    schedule 31.08.2010
comment
Не совсем верно - он будет передан всем шаблонам, которые отображаются с использованием RequestContext, каковыми являются все общие представления. - person Daniel Roseman; 31.08.2010
comment
У меня это не сработало, четыре с половиной года спустя я использовал Django 1.7. На самом деле в документах 1.7 есть предупреждение вверху docs.djangoproject.com/en /1.7/ref/settings - будьте осторожны при переопределении настроек, особенно если значением по умолчанию является непустой кортеж или словарь, например MIDDLEWARE_CLASSES и TEMPLATE_CONTEXT_PROCESSORS. Убедитесь, что вы сохранили компоненты, необходимые для функций Django, которые хотите использовать. Однако решение можно найти здесь: stackoverflow.com/questions/9899113/ - person Chirael; 04.02.2015

Ни один из приведенных ответов не решил мою проблему, поэтому для тех, кто наткнулся на это желание получить доступ к объекту запроса в общем шаблоне представления, вы можете сделать что-то вроде этого в своем urls.py:

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
    )
)

Ваше здоровье!

person mVChr    schedule 02.02.2012

Попробуйте использовать метод get_queryset.

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

см. ссылку (надеюсь, что это поможет): - См. Страницу Грега Акера ...

person Vishal Saha    schedule 02.07.2014
comment
большой! Это очень плохо документировано в Django. Мне как раз нужен запрос obj. в подклассе Listview. - person Timo; 29.10.2014
comment
Ссылка мертва, но она есть на web.archive.org: http://web.archive.org/web/20160923030156/http://www.gregaker.net/2012/apr/20/how-does-djangos-class-based-listview-work/ - person miyalys; 08.06.2021

Что сработало для меня, так это добавить:

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

В settings.py, а не в urls.py

person Tonatiuh    schedule 23.01.2012