Найти - Пользователи
Полная версия: Вывести поля в форме списком из файла
Начало » Django » Вывести поля в форме списком из файла
1 2
cpunkman

Добрый день, в django новичок, вопрос следующий, есть файл со списком, например , необходимо чтобы форма автоматически заполнялась полями с названиями, состоящими из части элемента списка, например первое поля называется a1, второе a2 и т.д. Выделить часть элемента я могу, но вот вывести циклом на html-страницу кодом в форме - не могу

Пробовал вот так:

  class RPForm(forms.Form):
    with open('demoenvs', 'r') as file:
        old = file.read().splitlines()
    i = 0
    b=[]
    for x in old:
          b[i] = forms.CharField(label=x.split('=')[0])
          i = i + 1

Но в ответ:

b = forms.CharField(label=x.split('=')) IndexError: list assignment index out of range

Помогите люди добрые, как сие сделать. Может вообще невозможно динамически выводить поля в форму, только пуками прописывать. Печаль…
JOHN_16
ПЕчаль это то что вы не умея Джангу и Питон, начинаете делать выводы. И, разумеется, не правильные.
А что бы вам помочь для начала нужно что бы вы код нормально запостили. Вы сами свое сообщение прочитали? Видите как у вас код оформлен? Код вставляется в специальные теги code.

Ну и да - у вас ошибка вообще не об этом.
cpunkman
JOHN_16
ПЕчаль это то что вы не умея Джангу и Питон, начинаете делать выводы. И, разумеется, не правильные.А что бы вам помочь для начала нужно что бы вы код нормально запостили. Вы сами свое сообщение прочитали? Видите как у вас код оформлен? Код вставляется в специальные теги code.Ну и да - у вас ошибка вообще не об этом.

Код у меня в файле form.py, затем в файле rpdata.html:

 {% extends 'base.html' %}
{% block content %}
    <h1>New post</h1>
    <form method="GET" class="post-form">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
{% endblock %}

JOHN_16
cpunkman
Код у меня в файле form.py:
Мы все очень рады за вас. Особенно за то как это приближает всех к решению, заметьте Вашей, проблемы.
Если вы не поняли, это был намек
cpunkman
JOHN_16

Я писал следуя стандартным рекомендациям по Django, которые нашел в интернете, в html файл вставляется форма из файла на питоне, файлы я привел выше.
Форма не отрабатывает вывод в цикле, об этом я написал.
Если нужны еще какие-то данные, я напишу.

Послушайте, если вы не можете, либо не хотите помогать - не пишите вообще, не надо намеков и снисхождения, я сюда пришел за адекватным диалогом в поисках решения, а не за одолжениями, снисхождениями и издевательствами.
Идите упражняйтесь в ношении короны и словесных оборотах в другое место, заранее признателен.
JOHN_16
cpunkman
Я вам написал что бы вы написали адекватно код в первом сообщение. Потому что пропало форматирование, а значит код уже не валидный. Там например пропало все то что было в квадратных скобках (а я догадываюсь что они там были). Ну и как нам помочь когда вы написали не валидный код? Что проверять то?
Если вы не внимательны к ответам других участников форума, а продолжаете писать то что не относится по настоящему к вашему вопросы - то может это вам стоит задуматься?
cpunkman
JOHN_16
cpunkmanЯ вам написал что бы вы написали адекватно код в первом сообщение. Потому что пропало форматирование, а значит код уже не валидный. Там например пропало все то что было в квадратных скобках (а я догадываюсь что они там были). Ну и как нам помочь когда вы написали не валидный код? Что проверять то?Если вы не внимательны к ответам других участников форума, а продолжаете писать то что не относится по настоящему к вашему вопросы - то может это вам стоит задуматься?

Вы правы, я запостил криво, мой косяк, но ошибка не из-за этого, вот так в действительности в самой программе:

 class RPForm(forms.Form):
    with open('demoenvs', 'r') as file:
        old = file.read().splitlines()
    i = 0
    b=[]
    for x in old:
          b[i] = forms.CharField(label=x.split('=')[0])
          i = i + 1

Вроде бы сейчас нигде не ошибся.
Я не нашел способ вывести данные в форму циклом (либо иным способом, не описывая в программе каждое поле) из файла, чтобы данные из файла были в качестве названия полей. Затем опять же получить данные из формы в файл (в другой файл), не описывая каждое поле (циклом, либо еще как-то)
Повторюсь, занимаюсь с django вторую неделю, с питоном месяц наверное, сроки горят.

Файл html:

 {% extends 'base.html' %}
{% block content %}
    <h1>New post</h1>
    <form method="GET" class="post-form">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
{% endblock %}

JOHN_16
cpunkman
b = forms.CharField(label=x.split('=')) IndexError: list assignment index out of range
Вот вам пример того что произошло:
 >>> l = [0, 1, 2]
>>> l[3] = 3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
Таким образом вы пытаетесь присвоить значение списку с индексом которого нет. Вы явно хотели этого
 b.append(forms.CharField(label=x.split('=')[0]))
cpunkman
JOHN_16

Да, я понимаю что почему-то выходит индекс из диапазона, но не понимаю почему.
Так как вы написали поле не выводит. Ни названия, ни поля.
Я читал, что append добавляет к списку значения, пробовал как-то с ним, не так, как вы предложили, но тоже не получилось.
JOHN_16
Во первых, надо понимать что я помог вам с конкретной ошибкой, но не решал вашу задачу.
Во вторых, конечно от того что вы создали кучу полей и поместили их в список магии не случится. Надо как минимум привязать эти поля к этой форме. Можно попробовать это сделать напрямую - не писать в список, a через setattr привязывать к форме.
С другой стороны есть разные решение типа такого. То есть люди как то решали этот вопрос, и вероятно стоит изучить сторонний опыт. СУдя по вашему коду сторонние решения будут со многих точек зрения более корректными.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB