django context_processors, объект запроса 'function' не имеет атрибута 'path' - PullRequest
0 голосов
/ 05 сентября 2018

Первый вопрос, заданный здесь при переполнении стека.

Итак, я запускаю несколько проектов Django и заканчиваю с этой проблемой:

AttributeError: 'function' object has no attribute 'path'

Что происходит на следующем процессоре контекста:

def get_request_promotions(request):

   promotions = PagePromotion._default_manager.select_related() \
       .prefetch_related('content_object') \
       .filter(page_url=request.path) \
       .order_by('display_order')

   if 'q' in request.GET:
       keyword_promotions \
        = KeywordPromotion._default_manager.select_related()\
        .filter(keyword=request.GET['q'])
   if keyword_promotions.exists():
       promotions = list(chain(promotions, keyword_promotions))
   return render(promotions, request)

То есть Django не может найти объект пути по запросу. Это мои контекстные процессоры в settings.py:

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
            'django.template.context_processors.request',  # For EL-pagination
            'common.core.context_processors.metadata',
            'portfolio.search.context_processors.search_form',
            'store.promotions.context_processors.promotions',
            'store.checkout.context_processors.checkout',
            'common.accounts.notifications.context_processors.notifications',
            ],
        },
    },
]

Любые намеки?

1 Ответ

0 голосов
/ 20 июня 2019

Хм, всем, кого это может заинтересовать, проблема была в методе render. Технически, представление на основе функций должно возвращать объект HttpResponse, а рендер просто не делает этого.

Я изменил последнюю строку кода на

return render_to_response(promotions, request)

и это сработало как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...