Переменная запроса не возвращается в функции ярлыка Django - PullRequest
0 голосов
/ 25 декабря 2011

Следующее в части моего просмотра файла

def user_detail(request, username,
    template_name='auth/user_detail.html', extra_context=None):
    context = {
        'user': shortcuts.get_object_or_404(User, username=username)
    }
    context.update(extra_context or {})
    return shortcuts.render(request, template_name, context)

и часть моего шаблона

 <ul class="nav">
    {% if request.user.username != 'steve' %}
    <li>
        <a href="{% url 'user_detail' 'steve' %}">Steve</a>
    </li>
    {% endif %}
    {% if request.user.username != 'james' %}
    <li>
        <a href="{% url 'user_detail' 'james' %}">James</a>
    </li>
    {% endif %}
</ul>

Однако, даже если я войду в систему с использованием любого из этих пользователей, я все равно получу эту ссылку. Это потому, что я проверяю request.user.username и переменная запроса не передается в шаблон функцией рендеринга.

Если я прямо называю user.username, тогда это нормально, но я не решаю эту проблему, потому что есть другие подобные представления, которые возвращают эту request переменную, которую я должен использовать.

Это все часть yourlabs fork из django-subscription . Я не использовал render shortcut раньше, поэтому я не знаю, почему я получаю эту ошибку.

Любая помощь будет высоко оценена.

1 Ответ

2 голосов
/ 25 декабря 2011

Все render гарантирует, что шаблоны отображаются с RequestContext.Это, в свою очередь, означает, что контекстные процессоры запущены.

Процессор контекста request не включен по умолчанию .Вы должны добавить его к settings.CONTEXT_PROCESSORS самостоятельно, если вам нужно.Однако в вашем случае вам это на самом деле не нужно, потому что вы просто заинтересованы в пользователе - а процессор auth предоставляет это как переменную user.

Итак, подведя итог, измените request.user на user и все будет хорошо.

...