Использование модулей в представлениях - PullRequest
1 голос
/ 13 марта 2012

Как я могу использовать модули в представлениях?Например, я пытаюсь использовать модуль markdown, поэтому я импортирую его в свой контроллер:

from gluon.contrib.markdown.markdown2 import markdown

и использую response.render

return response.render('default/main.html', locals())

, но когда я пытаюсьчтобы получить доступ к нему в представлении,

{{=markdown(post.message)}}

Я получаю сообщение об ошибке, говорящее, что оно не определено:

<type 'exceptions.NameError'> name 'markdown' is not defined

Как передать модуль представлениям?Есть ли альтернатива функции locals(), чтобы сделать это?

Что касается примечания, я могу получить доступ к db и session из моих представлений, потому что они импортированы в мой models?

Web2Py Version 1.99.7 (2012-03-04 22:12:08) stable

ОБНОВЛЕНИЕ: Импорт в мою модель db.py, кажется, исправляет это.Есть ли лучший способ сделать это?

1 Ответ

4 голосов
/ 13 марта 2012

Только для записи.

Не рекомендуется использовать locals ()

вместо передачи localals в response.render, лучше создать словарь с ключами, которые выхотите быть доступным для представления, которое будет отображено.

Вы также можете включить ссылку на уценку в этом словаре

from gluon.contrib.markdown.markdown2 import markdown
mydict = dict(markdown=markdown, anotherkey=anothervalue)
return response.render("path/to/view", mydict)

Не пытайтесь расширить locals () в mydict, вы будетеесли вы попробуете это, попробуйте столкнуться с проблемами.

Также вы можете просто использовать стандартное поведение web2py

from gluon.contrib.markdown.markdown2 import markdown
response.view = "path/to/view"
return dict(markdown=markdown, anotherkey=anothervalue)

. Другой вариант - импортировать уценку в файле модели.

...