Вложенные render_to_response в Django всегда показывают тип содержимого - PullRequest
0 голосов
/ 02 апреля 2011

В настоящее время я пытаюсь создать несколько представлений для одного запроса. Для 1 просмотра я делаю это:

return render_to_response(
    "/index/index.html",
    {}
)

И теперь, когда я пытаюсь добавить «левый» столбец в index.html, мне нужно поместить его в другое представление (потому что мне нужно применить ту же технику и в другом месте), так я это делаю :

leftCol = direct_to_template(request,settings.viewPath + "/columns/left.html",{})
return render_to_response(
    "/index/index.html",
    {
    'leftColumn': leftCol,
    }

Код работает хорошо, но результат не тот, который я ожидал. LeftCol показывает заголовок ответа в начале его вывода:

"Content-Type: text / html; charset = utf-8"

Как мне удалить этот заголовок? Я пытался изменить content_type и mimetype в параметре, но это не сработало.

Ответы [ 3 ]

4 голосов
/ 03 апреля 2011

Используйте render_to_string (http://docs.djangoproject.com/en/dev/ref/templates/api/#the-render-to-string-shortcut), чтобы вернуть строку после рендеринга шаблона. В качестве альтернативы, вы можете использовать {% include %}, чтобы включить шаблон в тот же контекст, что и текущий шаблон (но это все ещеруководство). Еще лучше было бы иметь базовый шаблон, который вы наследуете с помощью {% extends 'base.html' %}, который будет просто включать общие функциональные возможности шаблона, которые вы можете переопределить по своему усмотрению с помощью {% block %}, и позволит вам исключить дублированный контент шаблона, например, левую колонку..

4 голосов
/ 02 апреля 2011

Это потому, что direct_to_template() возвращает HttpResponse, а не строку. Рассматривали ли вы использование шаблонов, например, {% include %} шаблон тега, или написание собственного шаблона тега?

Если вы настаиваете на предварительном рендеринге шаблонов в своем представлении и последующем их объединении в шаблон, визуализируйте шаблон самостоятельно, вместо использования direct_to_template(). например,

from django.template.loader import get_template
from django.template import RequestContext

def someview(request):
    leftCol = get_template(settings.viewPath + "/columns/left.html").render(RequestContext(request)
    render_to_response("/index/index.html", {'leftColumn': leftCol})
0 голосов
/ 29 апреля 2015

Функция render_to_response возвращает объект HttpResponse.Вместо того, чтобы возвращать сам объект, вы можете вернуть его атрибут содержимого, чтобы получить доступ только к выводу, который вы хотите отобразить.

т.е.

response = render_to_response(
    "/index/index.html",
    {
    'leftColumn': leftCol,
    }
return response.content
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...