Шаблонные переменные Django, RequestContext и контекстные процессоры - PullRequest
1 голос
/ 20 апреля 2011

РЕДАКТИРОВАТЬ Я создаю часть обмена сообщениями на веб-сайте, но по какой-то причине я просто заметил, что функция не будет отображать сообщения в шаблоне.Вот функция и шаблон для страницы входящих сообщений:

def show_inbox(request):
u = request.user
messages = Message.objects.filter(to_user=u)
context = RequestContext(request,{'messages':messages})
return render_to_response('users/messaging/inbox.html',context_instance=context)

<table class="table-list" cellspacing="0">
            <th>Subject</th>
            <th>Recieved at</th>
            <th>Read</th>
            <th>Replied</th>
            {% if not messages %}
                <tr><td class="left">No messages</td></tr>
            {% endif %}
            {% for message in messages %}
            <tr class="{% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}">
                <td class="left largetd">
                    <a href="{{ message.from_user.get_absolute_url }}"><img src="{{ message.from_user.profile_pic }}" class="small-pic" /></a>&nbsp;&nbsp;
                    <a href="{{ message.get_absolute_url }}">{{ message.message_subject }}</a>
                </td>
                <td class="text-center">
                         <span class="small-text italics">{{ message.message_date_time }}</span> 
                </td>
                <td class="smalltd text-center">{{ message.message_is_read }}</td>
                <td class="smalltd text-center"></td>
            </tr>
            {% endfor %}
        </table>

1 Ответ

3 голосов
/ 20 апреля 2011

Вы проверили, что переменная messages действительно содержит сообщения, прежде чем вызывать render_to_response (), верно? В противном случае просмотрите исходный код полученного HTML-кода и посмотрите, есть ли что-нибудь там. Вам не хватает тега <<strong> tr > вокруг ячеек заголовка.

Также попробуйте вызвать render_to_response немного по-другому.

return render_to_response('users/messaging/inbox.html', {'messages': messages})

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

@ fceruti правильно, что вы столкнулись с django.contrib.messages . Когда вы использовали RequestContext, Django циклически просматривал ваш TEMPLATE_CONTEXT_PROCESSORS (объявленный в файле settings.py), чтобы предоставить больше переменных для вашего шаблона. В частности, в django.contrib.messages.context_processors.messages добавлена ​​переменная messages , которая изменила вашу собственную. Измените имя вашей переменной, и все будет в порядке.

Каждый процессор применяется по порядку. Это означает, что если один процессор добавляет переменная к контексту и второй процессор добавляет переменную с то же имя, второе будет переопределять первый.

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