我目前正致力于基于网络的应用程序,后端使用Django& amp; Python,前端是使用AngularJS开发的。
前端的其中一个页面上有一个表单,用户可以使用该表单导出已记录的数据。存储在电子表格的后端。
后端记录的所有数据都是时间敏感的,目前在后端(UTC)只设置了一个时区。我想创造'用于添加多个新时区的设置,以便记录的数据可以在不同的时区导出。
时区在project / apps / appAbc / abc / settings.py中设置:
class Production(Settings):
...
TIME_ZONE = 'UTC'
...
出口'表单有多个字段(预设,数据类型,按数量/期间排序数据,要导出的文件类型),我刚添加了一个'时区'下降到它:
<section class="panel panel-brand export-page panel-no-border-radius">
<div class="panel-body panel-body-fixed-md">
...
<div class="divider"></div>
<div class="row">
<label data-i18n="Timezone:" class="col-sm-3"></label>
<div ul-timezone-picker callback="selectTimezone" class="col-sm-9" default-label={{presetTimezone}} btn-class="btn-xs btn-default"></div>
</div>
<div class="divider"></div>
<div class="row" ul-scroll-to-me="scrollToFtype">
<label data-i18n="File type:" class="col-sm-3"></label>
<div ul-options-menu class="col-sm-9" options="ftypeOptions"
callback="selectFType" warning="{{ftypeWarning}}"
btn-class="btn-xs btn-default" default-idx="0" default-label="{{presetFtype}}"></div>
</div>
<div class="divider divider-lg"></div>
<div class="row">
<div class="col-sm-4"></div>
<div class="col-sm-4">
<button class="btn btn-sm btn-block btn-brand" ng-hide="!btnDisabled" ng-click="setDownloadUrl(true)">
<i class="ti-export"></i>
<span data-i18n="Export"></span>
</button>
<a class="btn btn-sm btn-block btn-brand" role="button" target="_blank" href="{{downloadURL}}" ng-hide="btnDisabled">
<i class="ti-export"></i>
<span data-i18n="Export"></span>
</a>
</div>
</div>
</div>
并在Pages / directive.js中,我向ulTimezonePicker
控制器添加了多个时区:
.directive('ulTimezonePicker', function() {
return {
...
controller: function ($scope) {
$scope.options = [{label: 'UTC', value: 0},
// Add in other timezones
{label: 'GMT', value: 1},
{label: 'BST', value: 2},
];
...
...
})
表单上selectTimezone()
字段调用的ul-timezone-picker
函数在project / libs / front / app / scripts / app / pages / exportCtrl.js中定义:
angular.module('app.pages').controller('ExportCtrl',
function(...) {
...
$scope.selectTimezone = function(option){
if(option) {
$scope.timezone = option;
if(option.label != $scope.presetTimezone) {
$scope.presetTimezone = undefined;
}
}
};
...
}
}
所以,我的问题是,如何让selectTimezone()
函数实际更改settings.py中定义的TIME_ZONE
变量的值?
我尝试在函数中声明变量的实例:
Production.TIME_ZONE = $scope.timezone;
但是当我这样做,并在浏览器中查看包含该表单的页面时,浏览器控制台会给出一个错误说明:
ReferenceError:未定义生产
如何从AngularJS函数中实际获取Python类,以更改其中一个变量的值?
答案 0 :(得分:0)
您不会与AngularJS的Python课程交谈。您的Python应用程序和Angular应用程序是两个独立的程序,甚至不能在同一台计算机上运行。
这里的挑战是发明一种语言&#34;这两个程序可以通信。有很多方法可以设计这样的语言,HTTP是一个很好的默认选择。
你的后端正在使用Django,而Django非常善于理解和响应HTTP请求。花一两天时间浏览Django教程,弄清楚如何制作Django应用程序,然后考虑应用程序需要能够处理的HTTP端点。将它添加到后端,稍微测试一下,然后转到Angular应用程序。
小心 - Django应用程序通常不依赖存储在类
class Production
之类的全局状态,而是将状态存储在数据库中。
一旦你有后端,使用Angular的$http
service将请求发送到你刚刚添加的地址。
我有点模糊(对不起),但我现在假设你刚才是Django的新手,这个教程会比我更有帮助。祝你好运!