#python #django #forms #html #scroll
#python #django #формы #HTML #прокрутка
Вопрос:
У меня есть следующий код, но он нигде не помещает прокрутку div. Все другие комбинации, которые я пробовал (например, размещение div вокруг таблицы), приводят к тому или иному неправильному размещению полос прокрутки. Это html:
<form action="" method="post">
<table>
<div style="overflow: auto; width : 200px; height : 50px;">
{{ form }}
</div>
<tr><td colspan="2"><input type="submit" value="Save"/></td></tr>
</table>
</form>
Мои формы выглядят следующим образом:
class GroupForm(forms.ModelForm):
class Meta:
model = Group
def __init__(self, *args, **kwargs):
super(GroupForm, self).__init__(*args, **kwargs)
self.fields['permissions'].widget = forms.CheckboxSelectMultiple()
self.fields['permissions'].choices = ((p.id, p.name) for p in Permission.objects.order_by("name"))
Мой views.py выглядит так:
def group_edit(request, group_id, template_name="group_edit.html", extra_context=None, form_class=None):
edit_group = get_object_or_404(Group, pk=group_id)
extra_context = extra_context or {}
form_class = form_class or GroupForm
extra_context["edit_group"] = edit_group
if request.method == "POST":
form = form_class(instance=edit_group, data=request.POST)
if form.is_valid():
form.save()
return redirect(reverse("global_group_list"))
else:
form = form_class(instance=edit_group)
extra_context["form"] = form
return direct_to_template(
request,
template_name,
extra_context=extra_context
)
Ответ №1:
Поместите DIV внутри строки таблицы следующим образом
<form action="" method="post">
<table>
<tr><td><div style="overflow: auto; width : 200px; height : 50px;">
{{ form.as_p }}
</div></td></tr>
<tr><td colspan="2"><input type="submit" value="Save"/></td></tr>
</table>
</form>
Комментарии:
1. Хорошо, я это сделал, хотя проблем быть не должно, но это не решает мою проблему. Это просто добавляет дополнительную строку в мою таблицу и вставляет туда пустой div. На самом деле это не инкапсулирует {{ форму }}.
2. Если DIV находится внутри таблицы, он должен быть в строке. Смотрите обновление.
3. это не сработало бы, в django {{form}} выводит <tr><td> .. для каждого поля. Вы могли бы попробовать это решение в сочетании с {{form.as_ul}}
4. Если это не сработает, можете ли вы показать мне функцию, которая выводит форму.
5. @JamesO, спасибо за это. Я не знал, что form является псевдонимом form.as_table
Ответ №2:
На самом деле это не проблема django, поэтому опубликованный вами код python действительно не имеет значения. Я думаю, проблема в том, что вы хотите, чтобы в таблице были полосы прокрутки, но кнопка отправки оставалась отдельной?
У вас есть два немедленных варианта. вы можете обернуть {{ form }} во вторую таблицу, чтобы у вас было две вложенные таблицы. В качестве альтернативы вы можете переместить div и кнопку отправки так, чтобы они находились за пределами вашей таблицы, чтобы таблица была обернута div.
В любом случае то, что у вас есть сейчас, не будет работать. любой непосредственный дочерний тег тега таблицы, отличный от tbody или tr, будет проигнорирован.