Включить шаблон по переменной - PullRequest
1 голос
/ 07 августа 2020

У меня есть такая модель:

class Component(models.Model)
    html_name = models.CharField(max_length=100) #example value: header_1.html

class MyModel(models.Model):
    components = models.ManyToManyField(Component ...)

В моем проекте Django у меня следующая структура.

root
----myapp
--------templates
------------myapp
----------------templates
--------------------default_template_1.html
----------------components
--------------------header_1.html

В моем шаблоне (default_template_1. html) Я хотел бы сделать что-то вроде этого:

{% for applied_component in mymodel.components.all %}
    {% with '../components/'|add:applied_component as component_template %}
        {% include component_template %}
    {% endwith %}
{% endfor %}

Это дает мне ошибку: TemplateDoesNotExist. Однако, если я извлеку эту строку внутри component_template и просто закодирую ее, включение будет работать нормально. Так что, похоже, это что-то с тем фактом, что это переменная.

Я также пытался изменить include на: {% include component_template|stringformat:"i" %} Но это дает мне:

PermissionError at /app/event/1/
[Errno 13]

1 Ответ

1 голос
/ 07 августа 2020

Я использую переменную шаблона в качестве включаемой строки, и для моей системы она работает нормально:

{% with settings.get_template as template %}
{% if template %}
<div class="setupFormWrapper">
  <form action="{% url 'simple:setup:products:settings_set' selected.id %}" method="POST" id="settingsForm" class="form{{ settings.formClass }}">
    {% csrf_token %}
    {{ template }}
  </form>
</div>

Итак, то, что вы пытаетесь сделать, определенно возможно. Вы уверены, что строите путь правильно и что механизм шаблонов имеет доступ / разрешения для обработки шаблона?

Для удобства поиска в Google: Ответ заключался в использовании абсолютных путей вместо относительных.

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