Есть ли специальный c способ ссылаться на шаблоны для виджетов в django? - PullRequest
1 голос
/ 28 мая 2020

Я создал свой собственный виджет, унаследованный от класса Widget, который работает так же, как виджет Select. Только из-за этого страница загружалась долго. Таким образом начался сеанс отладки, результатом которого стало следующее открытие. Когда моя форма использует собственный виджет Select, который я скопировал в один из моих собственных модулей python, чтобы я мог его изменить, он загружается быстро. Согласно панели инструментов отладки django загрузка страницы составляет около 500 мс. Но когда я меняю template_name и option_template_name на свои собственные шаблоны, которые были изменены, чтобы включать в себя точно такой же код, он снова занимает много времени, как мой оригинальный пользовательский виджет, около 5500 мс.


# Here is the beginning of the Select Widget class which i've copeied into my own widgets.py module.

class Select(ChoiceWidget):
    input_type = 'select'
    template_name = 'django/forms/widgets/select.html'
    option_template_name = 'django/forms/widgets/select_option.html'
    add_id_index = False
    checked_attribute = {'selected': True}
    option_inherits_attrs = False

Затем я вношу только два изменения - как указано выше.


class Select(ChoiceWidget):
    input_type = 'select'
    #template_name = 'django/forms/widgets/select.html'
    #option_template_name = 'django/forms/widgets/select_option.html'
    add_id_index = False
    checked_attribute = {'selected': True}
    option_inherits_attrs = False

    # input_type = 'select'
    template_name = "purchases/input_with_dropdown.html"
    option_template_name = "purchases/dropdown_options.html"
    # option_inherits_attrs = False
    # checked_attribute = {'data-selected': True}
    # add_id_index = False


Теперь для загрузки требуется время.

А вот html для input_with_dropdown. html. Это точно так же, как и select. html from django.


<select name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>{% for group_name, group_choices, group_index in widget.optgroups %}{% if group_name %}
  <optgroup label="{{ group_name }}">{% endif %}{% for option in group_choices %}
  {% include option.template_name with widget=option %}{% endfor %}{% if group_name %}
  </optgroup>{% endif %}{% endfor %}
</select>

А вот dropdown_options. html. Снова то же, что и select_options. html from django.

<option value="{{ widget.value|stringformat:'s' }}"{% include "django/forms/widgets/attrs.html" %}>{{ widget.label }}</option>

Я не могу понять, как даже отлаживать это дальше.

Мой единственный вывод, поэтому я ссылаюсь на неправильные шаблоны, поэтому на их поиск уходит много времени? Хотя это неправда.

РЕШЕНО -

Проблема связана с панелью инструментов django -debug-toolbar. Благодаря этому приложению весь вечер потрачен впустую.

Подобная проблема описана здесь - https://github.com/jazzband/django-debug-toolbar/issues/910

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...