我正在Powershell中编写一些报告脚本,并收集项目的摘要表作为空白对象,并逐个添加其他属性:
$cmClusters = @()
foreach ($Cluster in Clusters) {
$cmCluster = New-Object System.Object
$cmCluster | Add-Member -type NoteProperty -Name VC -Value $strVC
$cmCluster | Add-Member -type NoteProperty -Name Name -Value $Cluster.name
# etc...
$cmClusters += $cmCluster;
Run Code Online (Sandbox Code Playgroud)
}
如果我只是在结尾处转储$ cmClusters,我会得到一个格式列表输出,其中的属性按我添加的顺序排列.
但是,我希望编写一个通用的"将此对象集合转储到excel选项卡"功能来生成我的报告,该报告将是来自不同对象列表的几个类似的工作表选项卡.
看起来像这样:
function DumpToExcel($workbook, $tabTitle, $list)
{
$sheet = $workbook.worksheets.add()
$sheet.Name = $tabTitle
$col = 1
$row = 1
$fields = $list[0] | Get-Member -MemberType NoteProperty | Select-Object *
Foreach ($field in $fields) {
$sheet.cells.item($row,$col++) = $field.Name
}
$heading = $sheet.UsedRange …Run Code Online (Sandbox Code Playgroud) 我有一个Django应用程序,它使用Django模板系统生成其(非HTML)输出,此外还有Web UI.有一组页面,用户可以为报表创建模板,为变量替换添加{{}}标记,并使用额外的模板标记库来很好地格式化.
但是,我这样做的当前方式只是:
t = Template(component_template)
self.output_content = t.render(component_context)
Run Code Online (Sandbox Code Playgroud)
其中使用默认的Web输出模板引擎.如果您更改管理页面,这已经string_if_invalid设置了None,并且在手册中发出了严重警告.
因此,如果用户在标记中获取变量名称中的拼写错误,则会被静静地忽略并使其进入输出.如果他们有一个受损的标签,它实际上会杀死网络应用程序.我正在寻找一种在编辑时验证模板的方法,以便可以警告用户需要进行更改.
我的目标是编译器输出:
unknown variable 'ffsdfd' on line 33 of template
template syntax error on line 22 of template
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是创建一个新模板Engine()并将其用于此目的,因此我可以发现一个独特的默认值,string_if_invalid但这并没有告诉我有关丢失/不正确变量的任何信息.
engine = Engine(string_if_invalid="!!MISSING_VARIABLE!!", dirs=settings.TEMPLATES[0]['DIRS'],
context_processors=settings.TEMPLATES[0]['OPTIONS']['context_processors'],
app_dirs=settings.TEMPLATES[0]['APP_DIRS'])
t = Template(component_template, engine=engine)
try:
self.output_content = t.render(component_context)
except TemplateSyntaxError:
pass # do something useful here to collect error messages
Run Code Online (Sandbox Code Playgroud)
TemplateSyntaxError异常有效,除了我没有得到任何上下文信息,比如错误实际上在哪里,当然我只得到第一次失败.查看django.template代码,看起来内部存在某种扩展异常,它具有行号和导致它阻塞的令牌,但它不会从render()方法中逃脱.
所以:
如何为用户编辑的模板中的错误提供有用的错误处理?我应该以完全不同的方式做这件事吗?
我正在编写一个使用React生成SVG的可视化应用程序.我需要的一个部分是标签 - 即文本,由一个封闭的盒子包围,带有可变文本,可能是旋转和样式.
所以我有一个组件NodeLabel,目前有固定的尺寸:
render() {
return <g>
<rect className="label" x={this.props.x} y={this.props.y-10} width={20} height={40}></rect>
<text className="labelText" x={this.props.x} y={this.props.y}>{this.props.children}</text>
</g>
}
Run Code Online (Sandbox Code Playgroud)
我在DOM中找到了一些关于这样做的信息,这里是:SVG文本周围的矩形边框
但我不太清楚如何将其转换为React组件 - 在render()方法中,没有要查看的DOM元素.我可以使用document.createElement()而不是期望SVG元素的维度正常运行(并尊重CSS)吗?另外,有没有办法避免基本上创建代码的两个副本,一个在JSX中,另一个在此之前用于计算尺寸?(比如,例如,为这个临时的屏幕外拷贝评估JSX到DOM元素的片段)
更新:2018年1月,我又回到了这里:-)实际应用程序是一个开源网络图表工具,目前正在使用GD和PHP,但我希望转向JS,React和SVG.
这里的带宽标签是我想要重现的,尽管节点标签在当前的非SVG版本中使用相同的功能.
这是我的新的最小例子:
// MyLabel should be centred at x,y, rotated by angle,
// and have a bounding box around it, 2px from the text.
class MyLabel extends React.Component {
render() {
const label = <text x={this.props.x} y={this.props.y} textAnchor="middle" alignmentBaseline="central">{this.props.children}</text>;
// label isn't a DOM element, so you can't call label.getBoundingClientRect() …Run Code Online (Sandbox Code Playgroud)我有一个使用数据类的 Celery 应用程序(4.4.6)。由于 JSON 无法序列化/反序列化数据类,因此我在整个过程中强制使用 pickle (我知道风险,但我认为它在应用程序的部署方式中得到了缓解)。但是,我在海带的应用程序内收到错误,说TypeError: Object of type ResourceGroup is not JSON serializable。其他一切都正常,所以一般来说,它必须使用 pickle OK,但在这种情况下却不是。然而,异常附带的堆栈跟踪中没有任何内容提到我的代码。该软件的结构是在执行发现时动态创建其他任务的任务,使用delay(). 几乎所有任务都通过此 ResourceGroup 对象,并且它们运行良好,除了一个(我认为,根据这些错误的频率以及我完成任务时获得的日志记录来判断)。
这就是我在我的工作人员中配置 Celery 的方式。我是否需要设置一些其他设置才能真正使其在所有情况下使用 pickle?(或者,是否有一个可以重构数据类的 JSON 序列化器/反序列化器?)
class CeleryConfig:
task_serializer = 'pickle'
result_serializer = 'pickle'
event_serializer = 'pickle'
accept_content = ['pickle']
result_accept_content = ['pickle']
app = Celery('collector',
backend='redis://' + Config.REDIS_HOST,
broker='redis://' + Config.REDIS_HOST,
include=['tasks'])
app.config_from_object(CeleryConfig)
Run Code Online (Sandbox Code Playgroud)
更新:
以下是其中一个例外的完整示例:
[2020-07-23 05:02:10,621: DEBUG/MainProcess] pidbox received method active() [reply_to:{'exchange': 'reply.celery.pidbox', 'routing_key': 'cde2e89b-bb81-3c19-8491-b57b072e5f29'} ticket:6c2cc493-0e2d-4a85-821b-350bdc4bceeb]
[2020-07-23 05:02:10,621: …Run Code Online (Sandbox Code Playgroud) 我有一个Django应用,其模型可以通过Django REST Framework和常规表单界面访问。在将更改保存到模型之前,form接口进行了一些验证检查,但不使用任何特殊的Django框架,而只是视图中的简单本地更改。
我想将相同的验证应用于表单和REST调用,因此我想将验证移至模型中。我可以看到使用Field的验证器字段的简单情况下的处理方法,但是在一种情况下,我有一个名称/类型/值模型,其中“值”的可接受值根据选择的类型而变化。验证程序不会收到有关该字段所在模型的任何信息,因此它无权访问其他字段。
我如何执行此验证,而在DRF的序列化程序和表单的POST视图中没有实质相同的代码?
我一直在修补(我的第一个)Django项目,该项目始于Django 1.6,最近才移至Django 1.8。我还一直在研究Django Patterns&Best Practices(Django模式和最佳实践),学习我应该如何一直构建它:-)
我的项目有几个子应用程序和一个典型的主要urls.py,其中包含以下行:
(r'', include('noc.apps.frontpage.urls')),
Run Code Online (Sandbox Code Playgroud)
在每个应用程序中,我都为所有URL名称添加了应用程序名称,例如frontpage_edit_page,并{% url %}在整个模板中用于在视图之间进行引用。
然后,我了解了URL命名空间,并认为我可以取消URL名称的反义。就像我第一次解释的那样,如果我向主urls.py中的每个include()添加一个名称空间,则所有内容都将像以前一样起作用,因为所引用的URL名称将全部由“本地”应用解析。但这似乎不起作用。
在主urls.py中:
(r'', include('noc.apps.frontpage.urls', namespace='frontpage', app_name='frontpage')),
Run Code Online (Sandbox Code Playgroud)
在应用程序urls.py中:
url(r'^frontpage/edit/(?P<slug>[A-Za-z0-9]+)$', views.edit_page, name='front_page_edit_page'),
Run Code Online (Sandbox Code Playgroud)
并{% url 'front_page_edit_page' slug=page.slug %}在内部应用程序的模板,我得到0的网址尝试了NoReverseMatch例外。
我可以找到的所有示例都在讨论使用名称空间给URL前缀的方法- frontpage:front_page_edit_page但是1)对URL名称上的先前应用程序前缀有何改进?和2)您怎么可能拥有同一个应用程序的两个实例,这应该是有好处的。因此,我假设这是在应用程序之间进行链接,而不是在应用程序内部进行链接。
那我想念的是什么呢?我是否也需要在视图函数中嵌入app_name或名称空间?的确,即使我在我的所有URL名称上都添加了命名空间(即使在应用程序中),也会得到一个呈现的页面,但这似乎不合时宜。
django ×3
python ×3
celery ×1
exception ×1
forms ×1
javascript ×1
namespaces ×1
pickle ×1
powershell ×1
reactjs ×1
svg ×1
templates ×1
url ×1
validation ×1