Django пользовательские теги включения

Я пытаюсь создать свои собственные теги шаблона. Я понятия не имею почему я получающий эти ошибки. Я следую документу Django.

Это - файловая структура моего приложения:

pollquiz/
    __init__.py
    show_pollquiz.html
    showpollquiz.py

Это - showpollquiz.py:

from django import template
from pollquiz.models import PollQuiz, Choice
register = template.Library()

@register.inclusion_tag('show_pollquiz.html')
def show_poll():
    poll = Choice.objects.all()
    return { 'poll' : poll }

файл HTML:

<ul>
{% for poll in poll 
    <li>{{ poll.pollquiz }}</li>
{% endfor 
</ul>

в моем файле base.html я, включаю как это

{% load showpollquiz %}
and
{% poll_quiz %}

Bu затем я получаю ошибку:

Exception Value: Caught an exception while rendering: show_pollquiz.html

Я понятия не имею, почему это происходит. Какие-либо идеи? Следует иметь в виду, что я являюсь все еще новым в Django

5
задан eos87 13 May 2014 в 18:28
поделиться

4 ответа

Разве все пользовательские фильтры не должны находиться в каталоге тегов шаблонов?

templatetags/
    __init__.py
    showpollquiz.py

затем

@register.inclusion_tag('show_pollquiz.html')

ищет в MY_TEMPLATE_DIR / show_pollquiz.html шаблон

8
ответ дан 13 December 2019 в 19:25
поделиться

Вы забыли закрыть теги шаблона... Также, вам следует изменить имя в теге for, вы не можете иметь for poll в poll:

<ul>
{% for p in poll %} <!--here-->
    <li>{{ p.pollquiz }}</li>
{% endfor %} <!--and here-->
</ul>

Также обратите внимание, что вы вообще не используете тег включения, который вы определили. Я думаю, вы перепутали код, попробуйте пройти учебник от начала до конца, и все станет яснее.

3
ответ дан 13 December 2019 в 19:25
поделиться

Я обнаружил проблему. Проблема заключалась в том, что тег включения @ register.inclusion_tag ('show_pollquiz.html') явно ищет шаблон в каталоге default_template. Вот почему я получил ошибку.

На мой взгляд, это неясно в документации. Но я предполагаю, что это так, быть шаблоном и все такое ...

Ну, хорошо.

Теперь, как мне поместить @ register.inclusion_tag ('show_pollquiz.html') для просмотра в той же папке, что и приложение? под тегами шаблонов /?

0
ответ дан 13 December 2019 в 19:25
поделиться

Я бы не стал утруждать себя написанием ваших собственных тегов шаблонов: делайте все по шагам и пока придерживайтесь основ. Нет ничего плохого в {% include 'show_pollquiz.html'%}

0
ответ дан 13 December 2019 в 19:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: