J'essaie d'écrire un petit script qui automatisera certains PHP passe-partout que je dois écrire. Il devrait écrire une copie de la chaîne code
dans le fichier de sortie avec le divers champs de remplacement remplis pour chaque dict dans la liste fields
.
Cependant, je reçois l'erreur:
Traceback (most recent call last):
File "writefields.py", line 43, in <module>
formatted = code.format(**field)
ValueError: unexpected '{' in field name
Pour autant que je sache, il n'y a pas d'accolades supplémentaires dans les champs de remplacement ou les dict qui devraient causer des problèmes, donc toute aide serait appréciée.
code = '''
// {label}
add_filter( 'submit_job_form_fields', 'frontend_add_{fieldname}_field' );
function frontend_add_{fieldname}_field($fields) {
$fields['job']['job_{fieldname}'] = array(
'label' => __('{label}', 'job_manager'),
'type' => 'text',
'required' => {required},
'priority' => 7,
'placeholder' => '{placeholder}'
);
return $fields;
}
add_filter( 'job_manager_job_listing_data_fields', 'admin_add_{fieldname}_field' );
function admin_add_{fieldname}_field( $fields ) {
$fields['_job_{fieldname}'] = array(
'label' => __( '{label}', 'job_manager' ),
'type' => 'text',
'placeholder' => '{placeholder}',
'description' => ''
);
return $fields;
}
'''
fields = [
{
'fieldname': 'salary',
'label': 'Salary ($)',
'required': 'true',
'placeholder': 'e.g. 20000',
},
{
'fieldname': 'test',
'label': 'Test Field',
'required': 'true',
'placeholder': '',
}
]
with open('field-out.txt', 'w') as f:
for field in fields:
formatted = code.format(**field)
f.write(formatted)
f.write('\n')
Vous devez double tout {
ou }
qui ne font pas partie d'un espace réservé de mise en forme. Par exemple, vous avez:
function admin_add_{fieldname}_field( $fields ) {
[....]
}
dans la chaîne. Le {
et }
il n'y a pas de placeholder.
Doubler ces accolades leur échappe; la sortie finale contiendra un seul {
et }
caractères à nouveau:
code = '''
// {label}
add_filter( 'submit_job_form_fields', 'frontend_add_{fieldname}_field' );
function frontend_add_{fieldname}_field($fields) {{
$fields['job']['job_{fieldname}'] = array(
'label' => __('{label}', 'job_manager'),
'type' => 'text',
'required' => {required},
'priority' => 7,
'placeholder' => '{placeholder}'
);
return $fields;
}}
add_filter( 'job_manager_job_listing_data_fields', 'admin_add_{fieldname}_field' );
function admin_add_{fieldname}_field( $fields ) {{
$fields['_job_{fieldname}'] = array(
'label' => __( '{label}', 'job_manager' ),
'type' => 'text',
'placeholder' => '{placeholder}',
'description' => ''
);
return $fields;
}}
'''