2015-08-26 4 views
0

Я не могу получить разрешения на работу в шаблонах django, которые загружаются с использованием inclusion_tag.тег шаблона и разрешения не работают

{% if perms.myapp.foo %} 
    <p>In lookup works, too.</p> 
{% endif %} 

Вышеуказанное прекрасно работает в моем «основном» шаблоне, который вызывается из моего представления.

Однако, если я использую тот же код в шаблоне inclusion_tag, он не работает. Я подумал, может быть, это потому, что теги не прошли request?

В django doco here указано, что разрешения пользователей хранятся в переменной шаблона {{ perms }}. Разве это не делается для пользовательских тегов? Я предполагаю, что этот должен работать, не могу себе представить, почему это было бы по дизайну?

Пользователи с статусом «суперпользователя» также терпят неудачу, что имеет смысл, если отсутствует {{ perms }}.

Я просмотрел takes_contextdoco link here, но не смог выполнить эту работу. Не уверен, что это приведет меня к неправильному пути?

======== Обновлено ==============================

  • Фигурный он переместил мое обновление в «Ответ» ниже.
+0

Вы должны использовать 'takes_context', чтобы вы могли получить доступ к' perms'. Пожалуйста, покажите свой тег включения. – Alasdair

+0

Спасибо @Alasdair, я понял это с вашим подталкиванием в правильном направлении и добавил деталь к моему вопросу выше. Не стесняйтесь отвечать «Ответ», и я могу отметить, что он принят. – James

+0

Рад, что вы это поняли. Я мог бы добавить ответ, но было бы лучше, если бы вы добавили свое решение выше в качестве ответа. Вы можете ответить на свои вопросы о переполнении стека. – Alasdair

ответ

1

Ответ на мой вопрос, как было предложено.

Так что я исследовал 'take_context' далее, как было предложено пользователем alasdair. В результате я получил работу. Вот что я нашел.

Внутри myapp-tags.py:

@register.inclusion_tag('templatefilename.html', takes_context=True) 
def show_mycustomtag(context, start_date, end_date): 

#your code here 

return { 
    'start_date': start_date, 
    'end_date': end_date, 

    'perms': context['perms'] 
} 
  • Вы должны добавить takes_context=True при регистрации включение метки.
  • Затем вы можете добавить любые context переменные, которые вы хотите передать из шаблона 'main', в 'custom tag' в return. В моем случае мне нужна переменная perms.
  • После того, как я сделал выше, я мог бы сделать обычный {% if perms.myapp.foo %} и т.д. код в шаблоне тега :)

Это объясняется here в DOCO Джанго однако я немного запутался, я смешивала контекстные переменные тегов, но, как вы можете видеть из вышеизложенного, это не проблема!

+0

Это прекратило работать в Django 1.10. В Django 1.9 он работал нормально. Теперь в контекстном словаре нет ключей «запрос» или «пермы». Кто-нибудь знает, как это сделать в 1.10? –