Вам нужно будет сделать что-то вроде этого:
def your_view(request):
if request.method == 'GET':
form = SolutionForm()
elif request.method == 'POST':
problem = ... # logic to find the problem instance
solution = Solution(problem=problem) # or solution.problem = problem
form = SolutionForm(request.POST, instance=solution)
# the form will validate because the problem has been provided on solution instance
if form.is_valid():
solution = form.save()
# redirect or return other response
# show the form
ПРИМЕЧАНИЕ : Этот ответ применим к устаревшим браузерам без поддержки стандарта Flexbox. О современном подходе см .: https://stackoverflow.com/a/23300532/1155721
Я предлагаю вам взглянуть на Столбцы одинаковой высоты с кроссбраузерным CSS и без хаков .
По сути, сделать это с помощью CSS совместимым с браузером способом - нетривиально (но тривиально с таблицами), поэтому найдите себе подходящее готовое решение.
Кроме того, ответ зависит от того, хотите ли вы 100% высоты или равная высота. Обычно это равная высота. Если это 100% высота, ответ немного отличается.
Здесь старомодная демоверсия на основе position: absolute
контейнера содержимого и position: relative
родительского контейнера.
Что касается современного способа сделать это - Flex Box являются лучшими.
Как показано ранее, flexbox является самым простым. например.
#main{ display: flex; align-items:center;}
это выровняет все дочерние элементы по центру внутри родительского элемента.
В названии вопроса и его содержании есть некоторое противоречие. Название говорит о родительском div, но вопрос заставляет его звучать так, как будто вы хотите, чтобы два родственных div (навигация и контент) были одинаковой высоты.
Вы (а) хотите, чтобы навигация и контент были на 100% выше основной, или (б) хотите, чтобы навигация и контент были на одной высоте?
Я буду считать (б). ..если это так, я не думаю, что вы сможете сделать это, учитывая вашу текущую структуру страницы (по крайней мере, не с чистым CSS и без сценариев). Вам, вероятно, потребуется сделать что-то вроде:
<main div>
<content div>
<navigation div></div>
</div>
</div>
и установить для div содержимого значение с левым полем, равным ширине навигационной панели. Таким образом, контент находится справа от навигации, и вы можете установить div навигации равным 100% высоты контента.
РЕДАКТИРОВАТЬ: я делаю это полностью в моей голове, но вам, вероятно, также потребуется установить левое поле навигационного элемента в отрицательное значение или установить его абсолютное левое значение равным 0, чтобы переместить его обратно в крайнее левое положение. Проблема в том, что есть много способов сделать это, но не все они будут совместимы со всеми браузерами.
Я знаю, что прошло много времени с тех пор, как был задан вопрос, но я нашел простое решение и подумал, что кто-то может его использовать (извините за плохой английский). Вот оно:
CSS
.main, .sidebar {
float: none;
padding: 20px;
vertical-align: top;
}
.container {
display: table;
}
.main {
width: 400px;
background-color: LightSlateGrey;
display: table-cell;
}
.sidebar {
width: 200px;
display: table-cell;
background-color: Tomato;
}
HTML
<div class="container clearfix">
<div class="sidebar">
simple text here
</div>
<div class="main">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam congue, tortor in mattis mattis, arcu erat pharetra orci, at vestibulum lorem ante a felis. Integer sit amet est ac elit vulputate lobortis. Vestibulum in ipsum nulla. Aenean erat elit, lacinia sit amet adipiscing quis, aliquet at erat. Vivamus massa sem, cursus vel semper non, dictum vitae mi. Donec sed bibendum ante.
</div>
</div>
Простой пример. Обратите внимание, что вы можете превратиться в отзывчивость.
#main {
display: table;
}
#navigation, #content {
display: table-cell;
}
Посмотрите на этот пример .
с использованием jQuery:
$(function() {
function unifyHeights() {
var maxHeight = 0;
$('#container').children('#navigation, #content').each(function() {
var height = $(this).outerHeight();
// alert(height);
if ( height > maxHeight ) {
maxHeight = height;
}
});
$('#navigation, #content').css('height', maxHeight);
}
unifyHeights();
});
У меня была та же проблема, она работала на основе ответа Hakam Fostok, я создал небольшой пример, в некоторых случаях она могла бы работать, не имея необходимость добавлять display: flex;
и flex-direction: column;
на родительском контейнере
.row {
margin-top: 20px;
}
.col {
box-sizing: border-box;
border: solid 1px #6c757d;
padding: 10px;
}
.card {
background-color: #a0a0a0;
height: 100%;
}
Самый простой способ сделать это - просто подделать его. A List Apart подробно освещал это на протяжении многих лет, как в этой статье Дэна Седерхольма от 2004 года .
Вот как я обычно это делаю:
<div id="container" class="clearfix" style="margin:0 auto;width:950px;background:white url(SOME_REPEATING_PATTERN.png) scroll repeat-y center top;">
<div id="navigation" style="float:left;width:190px;padding-right:10px;">
<!-- Navigation -->
</div>
<div id="content" style="float:left;width:750px;">
<!-- Content -->
</div>
</div>
Вы можете легко добавить заголовок в этот дизайн, обертывание #container в другой div, встраивание заголовка div в качестве родственного элемента # контейнера и перемещение стилей полей и ширины в родительский контейнер. Кроме того, CSS следует переместить в отдельный файл, а не хранить в встроенном виде и т. Д. И, наконец, класс clearfix можно найти на positioniseverything .
[Ссылаясь на код Less Dmity в другом ответе] Я предполагаю, что это какой-то «псевдокод»?
Насколько я понимаю, попробуйте использовать технику искусственных столбцов это должно помочь.
http://www.alistapart.com/articles/fauxcolumns/
Надеюсь, это поможет :)
Если вы не возражаете, чтобы div навигации был обрезан в случае неожиданно короткого содержимого div, есть по крайней мере один простой способ:
#main {
position: relative;
}
#main #navigation {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 10em; /* or whatever */
}
#main #content {
margin: 0;
margin-left: 10em; /* or whatever width you set for #navigation */
}
В противном случае есть faux- колонки техника.
Это неприятная проблема, с которой постоянно сталкиваются дизайнеры. Хитрость в том, что вам нужно установить высоту 100% для BODY и HTML в вашем CSS.
html,body {
height:100%;
}
Этот, казалось бы, бессмысленный код должен определить для браузера, что означает 100%. Обидно, да, но это самый простой способ.