#javascript #python #angularjs #flask #angularjs-ng-include
#javascript #python #angularjs #flask #angularjs-ng-include
Вопрос:
Я изо всех сил пытался заставить angularjs ‘ng-include правильно работать с приложением Flask, и кажется, что независимо от того, что я пытаюсь, GET продолжает возвращать 404 ‘d. Главная страница (angular_test.html ) загружается нормально, но ничего из angular_entry.html .
Flask:
basedir = c.get('basedir')
app = Blueprint('angulartest', __name__, static_folder=basedir '/display/static',
template_folder=basedir '/display/angulartemplates')
def before_blueprint_request():
g.user = current_user
app.before_request(before_blueprint_request)
@app.route('/angular_test.html', methods=['GET'])
def ang_test():
print 'testing angular'
return make_response(open(basedir '/display/templates/angular_test.html').read())
#
# return app.send_static_file('angular_test.html') (I've tried both)
HTML:
<div id='content' ng-app='FeedEaterApp' ng-controller='MainController'>
<select ng-model="template" ng-options="t.name for t in templates">
<option value="">(blank)</option>
</select>
url of the template: <tt>{{template.url}}</tt>
<div ng-include src="'angular_entry.html'"></div>
<div ng-include src="template.url"></div>
<div ng-include="'angular_entry.html'"></div>
<div ng-include="template.url"></div>
</div>
JS:
app.controller("MainController", function($scope){
$scope.message = 'this is a message from scope!~'
$scope.templates =
[ { name: 'template1.html', url: 'angular_entry.html'},
{ name: 'template2.html', url: 'template2.html'} ];
$scope.template = $scope.templates[0];
});
Я также перепробовал все относительные / абсолютные пути, о которых я могу думать, и все равно ничего, кроме 404s. Я также попытался изменить статические папки и папки шаблонов в Flask. Нет кубиков.
Является ли Flask помехой для включения angular_entry.html ? Неправильно задан корневой путь моего приложения или что-то в этом роде?
помогите!
Ответ №1:
Невозможно полностью определить, не зная, что c
это или что делает его get
метод, но наиболее вероятная возможность заключается в том, что вы неправильно используете templates
аргумент to flask.Blueprint
. Если вы хотите предоставить шаблоны Angular, они должны быть доступны через HTTP. Шаблоны Flask передаются через механизм создания шаблонов Jinja на стороне сервера render_template
и не передаются конечному пользователю напрямую по HTTP.
Если это проблема, вы захотите перейти angulartemplates
static
и изменить пути включения, чтобы правильно ссылаться /static/angularetemplates/{your_template_name}
(вы также можете удалить аргумент ключевого templates
слова в своем Blueprint
инициализаторе).
Комментарии:
1. это просто захватывает базовый каталог для приложения. Он возвращает: ‘/home/jmadison/Development/FeedEater /feedeater’. Я попытался изменить ключевое слово template для схемы элементов, отделив угловые шаблоны от шаблонов flask, а также полностью удалив шаблон и статические ключевые слова. Я попытался переместить угловые шаблоны в статическую папку.
2. @jake — тогда лучше добавить эту информацию к вопросу 🙂
3. ха-ха, верно! НО я нашел комбинацию, которая сработала! <div ng-include src=»‘/static/angulartemplates/angularentry.html ‘»></div> После перехода к статическому, очевидно. Спасибо!!
4. Да, пропустил ведущую статику — извиняюсь за это.