我正在尝试检查提供的版本是否是有效的受支持版本.我已经在变量中设置了可接受版本的列表,如果提供的版本不在列表中,我想要失败.但是,我不确定如何做到这一点.
#/role/vars/main.yml
---
acceptable_versions: [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
和
#/role/tasks/main.yml
---
- fail:
msg: "unsupported version"
with_items: "{{acceptable_versions}}"
when: "{{item}} != {{version}}"
- name: continue with rest of tasks...
Run Code Online (Sandbox Code Playgroud)
以上是我想要做的事情,但是我无法弄清楚是否有一种单行方式来构建对故障模块的"list contains"调用.
有一个库存文件,如:
[my_hosts]
my_host ansible_ssh_host=123.123.123.123
my_host2 ansible_ssh_host=234.234.234.234
Run Code Online (Sandbox Code Playgroud)
我想在我的模板中收集一些调试信息.
如何访问剧本/模板中的别名变量?即:
debug: msg=Myhost is {{ ansible_host_alias }}
# Myhost is my_host
# Myhost is myhost2
Run Code Online (Sandbox Code Playgroud)我试图收集事实ansible -m setup my_host.变量ansible_hostname,HOSTNAME并HOST包含机器的主机名,即echo $HOSTNAME与我的ansible别名不同.
对于我的<ul>列表,我想<hr>在列表的每个元素之后添加一个.结果应呈现如下:
<ul class="mylist">
<li>
moooo!
<hr width="40%">
</li>
<li>
maaaaa!
<hr width="40%">
</li>
...
</ul>
Run Code Online (Sandbox Code Playgroud)
这是添加<hr>到每个的坏样式<li>所以我想仅使用css来折射它.我不能用:
.mylist > li: after{
content: "<hr>"
}
Run Code Online (Sandbox Code Playgroud)
因为内容会逃避角色.
我还没有想使用jQuery:
$('.mylist').find('li').append('<hr width="40%">');
Run Code Online (Sandbox Code Playgroud)
所以,问题是,我怎么可能追加<hr width="40%">到每个 <li>使用特定列表的CSS3?
以下是通常动态生成的内容.在页面的主要部分有一个<div class="span6">.有时这个div中的表变得比div本身更宽(我检查了css,宽度设置为100%).如果我只将短文放入表中,或者如果我将div放宽,一切都很好.问题是:
div class=spanX?我一直认为,块元素占用其父元素的宽度?td表中各个字符/空格的数量可以变化.如何防止表格比div更广泛?当然,我可以动态检查a中的字符数,ts但我如何处理这些信息呢?HTML:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>MySite</title>
<meta name="author" content="me"/>
<link href="static/css/bootstrap.css" rel="stylesheet">
<link href="static/css/bootstrap-responsive.css" rel="stylesheet">
<link href="static/profhase.css" rel="stylesheet">
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="static/bootstrap/js/bootstrap.js"></script>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<ul class="nav">
<li><a class="brand" href="profhase">MyBrand</a></li>
<li><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Blog</a></li>
</ul>
<div class="nav pull-right collapse nav-collapse" style="hight: 0px"> …Run Code Online (Sandbox Code Playgroud) 在一个新的Django项目中,我只是想知道是使用基于类的视图(CBV)还是基于函数的视图(FBV).
根据Django的文档:
基于类的视图提供了另一种将视图实现为Python对象而不是函数的方法.它们不替换基于函数的视图,但与基于函数的视图相比具有一定的差异和优势
这似乎与蟒蛇禅相矛盾'只有一种方法可以做到'
那么,哪种方式更好?
到目前为止,我只看到三种可能性:
始终使用FBV
这意味着根本不使用通用视图(因为这些是基于类的,因为1.5)
始终使用CBV:
在确定请求处理订单时存在某些问题.看到
http://lukeplant.me.uk/blog/posts/djangos-cbvs-were-a-mistake/
我还认为构建整个类层次结构对性能不利.在那种情况下,我也会问自己,为什么FBV还没有被弃用?
据称,将通用CBV纳入FBV
https://gist.github.com/spookylukey/2596285
这导致了许多残酷的样板代码
您是否看到其他任何方式,或者有人知道观点的去向?
我正在尝试实现 SSO 登录,从 saml 响应中获取所有授权权限:
class SAMLServiceProviderBackend(object):
def authenticate(self, saml_authentication=None):
if not saml_authentication: # Using another authentication method
return None
if saml_authentication.is_authenticated():
attributes = saml_authentication.get_attributes()
user = User(username=saml_authentication.get_nameid())
user.first_name = attributes['givenName']
user.last_name = attributes['sn']
return None
Run Code Online (Sandbox Code Playgroud)
在视图中我得到了类似的东西
...
user = authenticate(saml_authentication=auth)
login(self.request, user)
...
Run Code Online (Sandbox Code Playgroud)
login由于缺少save()方法而失败。唯一的方法是继承User并重写该save方法。尝试这个,我得到了下一个错误is_authenticated,get_and_delete_messages等等
有没有一种简单的方法可以将用户对象插入到会话中,而不将用户保存到数据库中?
就像是:
request.session['user'] = authenticate(saml_authentication=auth)
Run Code Online (Sandbox Code Playgroud) 使用语言环境设置时,Django shell表现出(至少对我而言)意外.逗号分隔的十进制字段的表单验证在从外部脚本调用时起作用,而在从django shell(ipython)调用时失败.
启动一个新项目我得到了以下文件:
local_forms/
??? local_forms
? ??? __init__.py
? ??? models.py
? ??? settings.py
? ??? urls.py
? ??? wsgi.py
??? manage.py
??? my_form.py
??? test_form.py
Run Code Online (Sandbox Code Playgroud)
local_forms/models.py:
from django.db import models
class MyModel(models.Model):
val=models.DecimalField("value",max_digits=11,decimal_places=2)
Run Code Online (Sandbox Code Playgroud)
my_form.py
from django import forms
from django.conf import settings
from local_forms.models import MyModel
class MyForm(forms.ModelForm):
val = forms.DecimalField(localize=True)
def __init__(self,*args,**kwargs):
super(MyForm,self).__init__(*args,**kwargs)
self.fields['val'].localize=True
if __debug__:
print self.fields['val'].localize
print ("Separator: "+settings.DECIMAL_SEPARATOR)
print ("Language: " +settings.LANGUAGE_CODE)
class Meta:
model=MyModel
Run Code Online (Sandbox Code Playgroud)
test_form.py:
#!/usr/bin/env python
import os
import sys
if …Run Code Online (Sandbox Code Playgroud) 有父类和子类我想用父实例初始化子类.我的方式看起来很麻烦(见下文):
我定义了一个static方法来提取init父初始化的参数:
class Parent(object):
@staticmethod
get_init_params(parent_obj):
a = parent_obj.a
b = parent_obj.b
return (a, b)
def __init__(self, a, b):
self.a = a
self.b = b
class Child(Parent):
def __init__(self, parent):
super(Parent, self).__init__(*get_init_params(parent))
Run Code Online (Sandbox Code Playgroud)
可能有更直接的方式吗?
编辑现在课程更简单
有没有办法访问基本模型的实际孩子,意思是:继续使用 django Docs 中的示例,让我们假设我正在建模不同的外卖餐厅,它们只是有共同点
deliver方法至此:
class Place(models.Model):
name = models.CharField(max_length=10)
class Pizzeria(Place):
topping = models.CharField(max_length=10)
tip = models.IntegerField()
def deliver(self):
deliver_with_topping(self.topping)
ask_for_tip(self.tip)
class Shoarma(Place):
sauce = models.CharField(max_length=10)
meat = models.CharField(max_lenght=10)
def deliver(self):
prepare_sauce_with_meat(self.sauce, self.meat)
Run Code Online (Sandbox Code Playgroud)
我现在想执行:
Place.objects.get(name="my_place").<GENERIC_CHILD>.deliver()
Run Code Online (Sandbox Code Playgroud)
即我不需要知道这个地方实际上是什么,只需要知道常用的deliver方法。然后模型“知道”该调用什么。
有类似的东西<GENERIC_CHILD>吗?
我在 pytest 中编写了一个夹具,它没有参数化,但被很多测试使用。后来我需要参数化这个夹具。
为了不必进行mark.parametrize所有旧测试,我执行了以下操作:
def ldap_con(request):
try:
server_name = request.param
except AttributeError:
server_name = "ldaps://my_default_server"
c = Connection(server_name, use_ssl=True)
yield c
c.unbind()
Run Code Online (Sandbox Code Playgroud)
现在我可以同时拥有:
def test_old(ldap_con):
run_test_to_default_connection(ldap_con)
@pytest.mark.parametrize('ldap_con', ['mynewserver'], indirect=True)
def test_new(ldap_con):
run_test_to_new_connection(ldap_con)
Run Code Online (Sandbox Code Playgroud)
该解决方案有几个缺点:
是否有标准方法来定义夹具参数的默认值?
django ×4
python ×4
ansible ×2
css ×2
html ×2
css3 ×1
django-forms ×1
html5 ×1
inheritance ×1
ipython ×1
pytest ×1
python-3.x ×1
yaml ×1