Вот мой сценарий. Я пытаюсь создать локальное веб-приложение для манипулирования моими фильмами, как для экономии времени, так и для изучения Python.
Вот мой серверный скрипт:
from bottle import run, request, post, get, template, error, static_file
from pathlib import Path
import re
# Show a list of files ready to be moved
@get('/move_new_movies')
def move_new_movies():
return template('move_new_movies')
# Generate a list of files for move_new_movies page
@post('/generate_movie_list')
def generate_movie_list():
... do some stuff ...
return movie_list
if __name__ == '__main__':
run(debug=True, reloader=True)
generate_movie_list () возвращает массив JSON в виде
{
'total_results': ,
'results': [{'folder': ,
'file_name':
}]
}
move_new_movies.tpl:
<!DOCTYPE html>
<html>
<head>
<title>Move New Movies</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('form').submit(function(e) {
$.ajax({
type: 'POST',
url: '/generate_movie_list',
data: $(this).serialize(),
success: function(response) {
-----error-------> <% movie_list = response['results']
movie_list_html = include('file_list', list='movie_list')
%>
$('#movie_list').html(movie_list_html);
}
});
e.preventDefault();
});
});
</script>
</head>
<body>
<h3>Enter path to new movies</h3>
<form action="/move_new_movies" method="POST">
<input type="text" name="movie_path">
<input type="submit" name="Submit">
</form>
<div id='movie_list'></div>
</body>
</html>
И, наконец, file_list.tpl
<table>
<tr>
<th>Folder</th>
<th>File Name</th>
</tr>
% for movie in list:
<tr>
<td>{{movie['folder']}}</td>
<td>{{movie['file_name']}}</td>
</tr>
% end
</table>
Теперь вот моя проблема. Когда я просматриваю ... / move_new_movies, я получаю сообщение об ошибке
Traceback (most recent call last):
... ... ...
File "\path\to\move_new_movies.tpl", line 15, in <module>
<% movie_list = response['results']
NameError: name 'response' is not defined
Первоначально generate_movie_list () возвращал шаблон ('file_list'). В ajax.success () не было python, и он просто обновлял страницу, используя любой полученный HTML. Это сработало так, как и ожидалось; Я ввел путь, нажал «Отправить», и появится нужная таблица. Тем не менее, я подумал, что для сервера будет лучше обслуживать только данные JSON, а клиент вставлять их в соответствующий файл шаблона.
Я думал, что это потому, что, если в списке не фильмы, а телешоу или музыка? Возможно, я захочу использовать другой шаблон и не хочу создавать новый маршрут для другого носителя.
Мне кажется, что я получаю эту ошибку, потому что шаблон обрабатывается раньше, чем ajax.success () может определить переменную результатов.
Есть идеи, как заставить это работать?