UnboundLocalError: локальная переменная 'dna', указанная перед присваиванием в Flask - PullRequest
0 голосов
/ 11 марта 2020

Раньше работал, прежде чем передать dnalists из render_template. Это произошло для передачи слишком большого количества данных? Что здесь может быть не так?

Python Код:

def home():
    form = DNAForm()
    rna = None
    if form.validate_on_submit():
        dna = form.dna.data.upper()
        # nonlocal dna
        A = dna.count('A')
        C = dna.count('C')
        G = dna.count('G')
        T = dna.count('T')

        rnadata = dna.maketrans('ACGT','UGCA')
        rna = dna.translate(rnadata)
        dnalist = [
            {'A' : A},
            {'C' : C},
            {'G' : G},
            {'T' : T},
            ]
        # if you don't want the form to be filled with previous data
        form.dna.data = ''

    return render_template('index.html', form=form, rna = rna, dna=dna, dlists=dnalist)

html шаблон

<h3>RNA</h3>
                <hr>
                {% if rna %}
                <h4>The DNA is: <span class="text-danger">{{ dn }}</span> </h4>
                <h4>The RNA is: <span class="text-danger">{{ rna }}</span> </h4>
                {% endif %}
                <h4>Total Number in DNA:</h4>
                <hr>
                {% for dl in dlists %}
                    {% for k,v in dl.items() %}
                        <h4>{{ k }} : <span class="text-danger">{{ v }}</span> </h4>
                    {% endfor %}
                {% endfor %}

Ответы [ 3 ]

2 голосов
/ 11 марта 2020

Если

if form.validate_on_submit():

равно False, то dna никогда не будет определено. Таким образом, вы получите ошибку здесь:

return render_template('index.html', form=form, rna = rna, dna=dna, dlists=dnalist)

Убедитесь, что ваша форма проверена при отправке. Или вы можете определить какое-то значение по умолчанию, например None (но это может вызвать другие проблемы)

1 голос
/ 11 марта 2020

это происходит, когда ваш if возвращает False.

if form.validate_on_submit():

, как вы можете видеть в структуре вашего кода, когда оператор if возвращает False, код переходит непосредственно к возврату, где он пытается использовать переменную днк, которая не была установлена ​​(потому что она устанавливается только когда if возвращает True

для ее решения, вы должны либо добавить оператор else, либо определить значение переменной днк для фиктивное значение до начала if. Пока вы это делаете, вы должны взглянуть на переменную dna_list, так как у вас может быть та же проблема с этой.

примерно так:

rna = None
dna = None
dna_list = None
    if form.validate_on_submit():

Надеюсь, я смог объяснить это понятным образом.

0 голосов
/ 11 марта 2020

define dna = нет после rna = никто не должен решить проблему.

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