Функция render_to_string не отображает контекстные переменные

Я пытаюсь реализовать функцию render_to_string в проекте Django.

У меня есть HTML-шаблон (strategy.html), содержащий множество переменных Django Template Language и 'if conditions', и я хотел бы сохранить выведенный результат в DB-модели.

Вывод сохраняется в db-модели, но контекстные переменные игнорируются.

Действие должно срабатывать после нажатия кнопки 'Save' (см. код ниже).

Важное замечание: переменные DTL и «если условия» корректно отображаются при использовании функции рендеринга с помощью кнопки 'Generate'.

Вот файл views.py:

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.template.loader import render_to_string
from strategiesAPI.models import strategiesList


@login_required
def index(request):
    if request.method == "POST":
        # Get form information
        starttime = request.POST.get("starttime")
        endtime = request.POST.get("endtime")
        trigger = request.POST.get("trigger")
        entrieslimit = request.POST.get("entrieslimit")
        direction = request.POST.get("direction")
        pattern = request.POST.get("pattern")
        stoploss = request.POST.get("stoploss")
        takeprofit = request.POST.get("takeprofit")
        tradeliquid = request.POST.get("tradeliquid")

        # Context variables for the render and render_to_string function 
        content = {
                "starttime": starttime, 
                "endtime": endtime, 
                "trigger": trigger, 
                "entrieslimit": entrieslimit, 
                "direction": direction, 
                "pattern": pattern, 
                "stoploss": stoploss, 
                "takeprofit": takeprofit, 
                "tradeliquid": tradeliquid
                    }
        
        # Action based on the button pressed inside the index.html template

        # GENERATE button
        if request.POST['button'] == 'Generate':
            # Write strategy on the right side of the page using the user's inputs
            return render(request, "composer/index.html", content)

        # SAVE button
        if request.POST['button'] == 'Save':
            # Save the strategy DTL output into the db model using the render_to_string function
            strategy_html = render_to_string("composer/strategy.html", content)
            strategiesList.objects.create(script=strategy_html)
            return render(request, "composer/index.html")
    else:
        return render(request, "composer/index.html")

Ниже я вставлю то, что сохраняется в db-модели, а затем файл strategy.html, содержащий переменные DTL и «условия if» (которые игнорируются)

<!-------------------------------------- Right-side EasyLanguage & DTL output -------------------------------------->

<div class="right" id="output" style="font-size: 11px;">
    // EasyLanguage code composer by ©SOACM. All rights reserved // <br>
    <br>

    <!-------------------------------------- Breakout -------------------------------------->
    
    <!-------------------------------------- Breakout end ----------------------------------->


    <!-------------------------------------- Reversal --------------------------------------->
    
    <!-------------------------------------- Reversal end ------------------------------------->
</div>
<!-------------------------------------- Right-side EasyLanguage & DTL output -------------------------------------->

<div class="right" id="output" style="font-size: 11px;">
    // EasyLanguage code composer by ©SOACM. All rights reserved // <br>
    <br>

    <!-------------------------------------- Breakout -------------------------------------->
    {% if trigger == "breakout" %}
        input: StartTime({{ starttime }}), EndTime({{ endtime }}), MyStopLoss({{ stoploss }}), MyTakeProfit({{ takeprofit }}); <br>
        var: bool MyTime(False), int MP(0); <br>
            MP = MarketPosition; <br>
            MyTime = False; <br>
            if Time >= StartTime and Time <= EndTime and EntriesToday(date[0]) < 1 then MyTime = True; <br>
            <br>
            
            {% if pattern == "none" %}
            // Levels <br>
            if date <> date[1] then begin <br>
            var: highd1(0), lowd1(0); <br>
            highd1 = HighS(1); <br>
            lowd1 = LowS(1); <br>
            end; <br>
            {% endif %}
            <br>
            

Возможно, вы забыли передать контекст «content» в функцию рендеринга :

return render(request, "composer/index.html")

Добавьте «контент», как вы сделали, если request.POST['button'] == 'Generate' :

return render(request, "composer/index.html", content)

Вернуться на верх