Django на объекте 'dict' веб-сервера Apache не имеет атрибута 'render_context'

У меня небольшая проблема, я загрузил свой проект Django на веб-сервер, на котором запущены apache, mod_python и django. На компьютере, который я разработал на следующем, отлично работает

nameBox = getNamesBox().render(locals())

-

def getNamesBox():
    users = User.objects.filter()

    templateString = '<select name="name box">'
    for user in users:
        templateString += '<option value="' + user.name + '"> ' + user.name + '</option>'

    templateString += '</select>'

    template = Template(templateString)

    return template

Но на веб-сервере при запуске с сервера запуска apache или manage.py он говорит

AttributeError at /order_site/order/
'dict' object has no attribute 'render_context'

Код на обеих машинах идентичен, поэтому мне кажется, что это какая-то другая проблема? Он не может отобразить мою форму, и я не знаю, почему.


person John Lotacs    schedule 13.06.2011    source источник
comment
Вы, кажется, упустили весь смысл шаблонов. Зачем создавать текст вручную, используя конкатенацию, а затем рендерить что-то, что не содержит синтаксиса шаблона, вместо того, чтобы фактически использовать файл шаблона с правильной логикой шаблона, который может сделать все это за вас?   -  person Daniel Roseman    schedule 13.06.2011
comment
Или, что еще лучше, используйте классы форм.   -  person Rafe Kettler    schedule 13.06.2011
comment
@Рейф, ну да, действительно.   -  person Daniel Roseman    schedule 13.06.2011


Ответы (1)


Метод render() для Template принимает в качестве аргумента объект Context, а не словарь. Вам нужно будет создать объект Context из dict, например.

namedbox = getNamesBox().render(Context(locals()))
person Rafe Kettler    schedule 13.06.2011
comment
Можно импортировать с помощью from django.template import Context - person azmeuk; 24.08.2016
comment
в более новых версиях render() принимает dict как контекст, у которого нет этого метода - person patroqueeet; 11.08.2017
comment
@patroqueeet Мне тоже так говорили. Но я видел Template,render() реализацию Django 1.11. Там он пытается получить доступ к атрибуту render_context переданного объекта dict. В моем случае это вызвало ошибку, когда я передал объект dict. Там написано dict object has no attribute 'render_context' . - person sajid; 17.05.2018