#django
#django
Вопрос:
Как мне передать функцию шаблону в extra_context. Спасибо.
Обновление: Идея в том, что в шаблоне я мог бы развернуться и передать эту функцию в качестве параметра фильтру.
Ответ №1:
Есть ли причина, по которой вы не можете просто передать ссылку на функцию?
def my_func():
# ...
urlpatterns = patterns('',
(r'^foo/$', direct_to_template, {
'template': 'foo.html',
'filter_func': my_func,
}),
)
Редактировать: Rats, это не будет работать с общими представлениями:
Если значение в словаре можно вызвать, общее представление вызовет его непосредственно перед отображением шаблона.
Вероятно, вы могли бы обойти это, поместив свою функцию в словарь, хотя это не очень красиво:
def my_func():
# ...
urlpatterns = patterns('',
(r'^foo/$', direct_to_template, {
'template': 'foo.html',
'filter_funcs': { 'my_func': my_func },
}),
)
Я должен сказать, что почти каждый раз, когда я начинаю пытаться заставить общие представления выполнять что-то немного необычное, я, как правило, трачу изрядное количество времени, прежде чем просто написать четырехстрочное пользовательское представление, которое делает то, что мне нужно.
Комментарии:
1. Если я попробую extra_context={‘f’: f2}, он возвращает ошибку «f2 () принимает ровно 1 аргумент (задано 0)», как будто он думал, что я вызываю его там.
2. да. f2 — это функция. Я установил extra_context ={‘f’: f2}, и он возвращает это сообщение об ошибке, как будто он думал, что я пытаюсь вызвать f2 вместо ссылки на него. Вы уверены, что в вашем примере это не просто вызов my_func, учитывая, что он не принимает параметры.
3. Смотрите мою правку — очевидно, общие представления вызывают функции в
extra_context
перед рендерингом шаблона.