Значение ошибки словаря обновления элемента последовательности № 0 имеет длину 1; 2 требуется - PullRequest
2 голосов
/ 23 мая 2019

Я хочу написать контекстный процессор, чтобы список можно было увидеть в любом месте приложения в django (версия 2.1).Я получаю сообщение об ошибке:

ValueError at /

dictionary update sequence element #0 has length 1; 2 is required
def following_issues(request):
    request_context = RequestContext(request)
    request_context.push({'following_issues': Issue.objects.filter(followers=request.user.is_authenticated)})
    return request_context

В моих настройках:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.request',
                'django.template.context_processors.debug',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'base.context_processors.following_issues',
            ],
        },
    },
]

1 Ответ

2 голосов
/ 23 мая 2019

Я думаю, вы не поняли, как написать контекстный процессор.Как сказано в документации [Django-doc] :

У контекстного процессора очень простой интерфейс: это функция Python, которая принимает один аргумент ,HttpRequest объект, а возвращает словарь , который добавляется в контекст шаблона.Каждый контекстный процессор должен возвращать словарь.

Так что вы должны просто написать это как:

def following_issues(request):
    if request.user.is_authenticated:
        return {
            'following_topics': Issue.objects.filter(followers=request.user)
        }
    else:
        return {
            'following_topics': Issue.objects.none()
        }

Таким образом, мы можем просто вернуть здесь словарь, где мы отображаем following_topics на Issue.objects.filter(..) выражение.

Кроме того, вы не можете указать followers=request.user.is_authenticated, так как это логическое значение, и вы, вероятно, если я правильно понимаю моделирование, фильтруете пользователя.Здесь я написал, что в случае, если пользователь не аутентифицирован, мы возвращаем пустое QuerySet.

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